无法使用使用magrittr forward管道的over ARMA模型进行循环
我有下面的代码。 它看起来很简单,它只是在ARMA模型AR(1)、MA(0)和AR(1)MA(2)等的各种组合上循环无法使用使用magrittr forward管道的over ARMA模型进行循环,r,magrittr,R,Magrittr,我有下面的代码。 它看起来很简单,它只是在ARMA模型AR(1)、MA(0)和AR(1)MA(2)等的各种组合上循环 load.or.install <- function(package.names) { is.installed <- function(mypkg) is.element(mypkg, installed.packages()[, 1]) for (package.name in package.names) { if (!is.
load.or.install <- function(package.names) {
is.installed <- function(mypkg) is.element(mypkg, installed.packages()[, 1])
for (package.name in package.names) {
if (!is.installed(package.name)) {
install.packages(package.name)
}
library(package.name, character.only = TRUE, quietly = TRUE, verbose = FALSE)
}
}
load.or.install(c("tseries", "forecast", "ggplot2", "dplyr", "magrittr", "rdatamarket"))
max.p <- 8 # maximum number of AR terms
max.q <- 7 # maximum number of MA terms
#import data
ausgdp <- as.ts(dmseries("http://data.is/1jDQwpr")[, 1]) %>% log() %>% diff(difference = 1)
model.orders <- as.matrix(expand.grid(AR = 0:max.p, DIF = 0, MA = 0:max.q))
models <- list()
1:nrow(model.orders) %>% {
models[[.]] <- Arima(ausgdp, order = model.orders[.,], include.constant = T, method = "ML")
}
如果我在循环外运行以下命令,它就会工作
Arima(ausgdp, order = model.orders[1,], include.constant = T, method = "ML")
一旦它与model.orders[,]一起进入循环,它就会失败
如果您有任何帮助,我们将不胜感激。请注意运行以下程序时会发生什么
1:nrow(model.orders)%%>%{length(.)}
实际上,您一次传递1:nrow(model.orders)
中的所有元素,而不是逐个传递
您不是一次将model.orders
分为一行,然后将其传递给order
,而是一次获取所有行,提示出错
使用管道后的lappy
,可以获得所需的结果
models <- 1:nrow(model.orders) %>%
lapply(., function(row_n){
Arima(ausgdp,
order = as.vector(model.orders[row_n, ]),
include.constant = T,
method = "ML")
})
型号%
lappy(,函数(第n行){
Arima(澳大利亚),
order=as.vector(model.orders[row_n,]),
include.constant=T,
方法=“ML”)
})
注意运行以下操作时会发生什么
1:nrow(model.orders)%%>%{length(.)}
实际上,您一次传递1:nrow(model.orders)
中的所有元素,而不是逐个传递
您不是一次将model.orders
分为一行,然后将其传递给order
,而是一次获取所有行,提示出错
使用管道后的lappy
,可以获得所需的结果
models <- 1:nrow(model.orders) %>%
lapply(., function(row_n){
Arima(ausgdp,
order = as.vector(model.orders[row_n, ]),
include.constant = T,
method = "ML")
})
型号%
lappy(,函数(第n行){
Arima(澳大利亚),
order=as.vector(model.orders[row_n,]),
include.constant=T,
方法=“ML”)
})