строка как аргумент функции в R внутри карты

Вопрос: у меня есть следующий код R (ниже): он не работал с x = ARIMA и ETS из my.list. Вот в чем проблема: fabletools::model(arima_auto = fable::ARIMA(Trips)) = это работает, но это: fabletools::model(arima_auto = fable::x(Trips)) не работает. Может кто знает решение моей проблемы. Возможно ли это вообще в R?

library(tidyverse)
library(fable)
library(fabletools)
library(tsibble)

tourism <- tsibble::tourism 

my.list <- list("ARIMA","ETS")

my.list[[1]] ## "ARIMA"
my.list[[2]] ## "ETS"

f_test <- function(.df1,.n){

  x <- .df1[[.n]][[1]] ### 1) "ARIMA", "ETS"
  print(x)
  
  fit <- tourism %>%
    dplyr::filter(Region == "Adelaide") %>%
    #fabletools::model(arima_auto = fable::ARIMA(Trips)) ### it works
    fabletools::model(arima_auto = fable::x(Trips)) ### didn't work
  
  assign("fit", fit, envir= globalenv())
} 

purrr::map(.x = seq(my.list), .f = ~(f_test(my.list, Counter <- .x)))

person Christian Moczkowski    schedule 11.03.2021    source источник


Ответы (1)


Когда вы вызываете x(Trips), ваш x является вектором символов "ARIMA". R понятия не имеет, что означает [character vector](Trips). Это все равно, что пытаться вызвать "Alice"(y) и ожидать, что R будет рассматривать "Alice" как функцию, хотя явно таковой не является.

Что вам нужно, так это способ для R поменять местами строку "ARIMA" для соответствующей функции. Это то, для чего предназначен match.fun. Попробуйте это вместо этого:

working<-match.fun(x)
fabletools::model(arima_auto = working(Trips))

Обратите внимание, что нам не нужно было использовать для этого какие-либо пространства имен, в отличие от вашего исходного подхода. Хорошей практикой было бы найти способ сделать это, например. working<-get(x,envir = environment(fable)), но здесь он нам не понадобился.

person J. Mini    schedule 11.03.2021
comment
Большое спасибо. Оно работает. :) - person Christian Moczkowski; 12.03.2021