字符串作为 R inside map 中的函数参数
string as function argument in R inside map
问题:我有以下R代码(如下):
它不适用于“my.list”中的“x”=“ARIMA”和“ETS”。
那就是问题所在:
"fatabletools::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)))
当您调用 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))
,但我们这里不需要。
问题:我有以下R代码(如下): 它不适用于“my.list”中的“x”=“ARIMA”和“ETS”。 那就是问题所在: "fatabletools::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)))
当您调用 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))
,但我们这里不需要。