循环通过向量,向量的元素是R中另一个函数的输入

时间:2015-05-13 18:12:09

标签: r functional-programming combinations

我需要将向量元素的所有组合应用于特定函数,并将这些元素用作此函数的输入。我希望它有点快,但到目前为止,任何组合的应用和它的不同口味都没有结果。

简而言之,我有一个时间序列,我需要拟合一个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作业运行,因此用户不需要添加任何输入以简化上述过程。

2 个答案:

答案 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 Rdata.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)