我需要将向量元素的所有组合应用于特定函数,并将这些元素用作此函数的输入。我希望它有点快,但到目前为止,任何组合的应用和它的不同口味都没有结果。
简而言之,我有一个时间序列,我需要拟合一个ARIMA模型来描述这个过程。包统计中的函数arima需要一组输入,因为我不想手动执行此操作,可以为我做这个功能的函数似乎是有序的。
到目前为止,我已经尝试过这个:
library(stats)
#need a vector to cycle and use as inputs in the function
nums <- c(0:3)
#random time series
x <- rnorm(1000,mean=1,sd=1)
#attempt 1
lapply(nums, arima(x, order=c(nums,nums,nums)))
#attempt 2
lapply(nums, arima(x))
#attempt 3
#create another vector, as to start cycle with 1 rather than 0
nums2 <- c(1:3)
lapply(nums2, arima(randomtimeseries, c(nums, nums, nums)))
这必须以这种方式完成,因为它将作为cron作业运行,因此用户不需要添加任何输入以简化上述过程。
答案 0 :(得分:1)
您需要学习创建匿名函数。需要明确的是:那些是排列,而不是组合。您可能需要组合,如果是这样,请查看expand.grid。矢量和矢量化标签至少在概念用于描述R实践的方式上具有误导性。解决方案中不会有任何矢量化。
也许,取决于实际目标以及num矢量的所有组合是否有意义(我认为这是令人怀疑的):
apply( expand.grid(num,num,num), 1, function(o) arima(x, order=c( x[1],x[2],x[3] ) ) )
这也是因为没有仔细考虑模型中的数据而将其转变为详尽的过程。如果预计有任何推断,统计问题可能会很严重。
答案 1 :(得分:0)
这看起来像是reval
包裹的作业!
首先,生成参数集(请参阅Generating all distinct permutations of a list in R和data.frame rows to a list):
all <- expand.grid(0:2, 0:2, 0:2, stringsAsFactors = FALSE)
perms <- all[apply(all, 1, function(x) {length(unique(x)) == 3}),]
orders <- as.list(as.data.frame(t(perms)))
names(orders) = NULL
然后,使用evalmany()
应用函数:
library(stats)
x <- rnorm(1000,mean=1,sd=1)
require(reval)
res = evalmany(arima, order = orders, default.args = list(x = x),
method="set", collate = FALSE)