【问题标题】:Cycling through a vector whose elements are inputs to another function in R循环遍历一个向量,该向量的元素是 R 中另一个函数的输入
【发布时间】:2015-05-14 06:00:11
【问题描述】:

我需要将向量元素的所有组合应用于特定函数,并将这些元素也用作该函数的输入。我希望它有点快,但到目前为止,任何组合应用和它的不同口味都被证明是徒劳的。

简而言之,我有一个时间序列,我需要拟合一个 ARIMA 模型来描述这个过程。包 stats 中的函数 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 作业运行的,因此用户无需添加任何输入以简化上述过程。

【问题讨论】:

  • 那么,您想运行arimaorder = c(0, 1, 2),然后是order = c(0, 2, 1),然后是1, 2, 0,然后是1, 0, 2,等等?
  • 是的。通过向量给出的所有可能组合运行 Funktion。

标签: r functional-programming combinations


【解决方案1】:

您需要学习创建匿名函数。需要明确的是:这些是排列,而不是组合。不过,您可能需要组合,如果需要,请查看 expand.grid。向量和向量化标签至少在该概念用于描述 R 实践的方式上具有误导性。解决方案中不会有任何矢量化。

也许,取决于实际目标以及 num 向量的所有组合是否有意义(我认为这是值得怀疑的):

apply( expand.grid(num,num,num), 1, function(o) arima(x, order=c( x[1],x[2],x[3] ) ) )

这也有点像没有仔细考虑模型中的数据,而是将其转为详尽的过程。如果预测到任何推断,统计问题可能会很严重。

【讨论】:

  • 这是我可以分享的最小代码,它说明了我当前的问题。为了安心,整个脚本要大得多,并且在前后运行诊断测试以选择最适合数据的模型。我实际上想要组合,我失去了很多可能的模型,只是排列。此示例仅显示 ARIMA 组件,但不存在季节性(在示例中),这可能是必需的。
【解决方案2】:

这看起来像是 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 2021-12-06
    • 2015-07-24
    相关资源
    最近更新 更多