for循环的改进:创建一系列子集而不循环

时间:2017-06-20 16:27:01

标签: r for-loop time-series subset

我的目标是从变量列表中创建许多时间序列子集。我用for循环写了这个。但是,我正在寻找关于如何处理existir R函数的更优雅的想法,它不需要循环。 R中新功能的所有想法和介绍都非常受欢迎。

代码的可重现示例:

russell_sim <- arima.sim(model=list(ar=c(.9,-.2)),n=449)
russell_sim <- ts(russell_sim, start = c(1980,1), end = c(2017,5) ,frequency = 12)

pmi_sim <- arima.sim(model=list(ar=c(.9,-.2)),n=449)
pmi_sim <- ts(russell_sim, start = c(1980,1), end = c(2017,5) ,frequency = 12)

big_list<- list(russell = russell_sim, pmi= pmi_sim) 

for (i in 1: length(big_list)) { 
  assign(paste(names(x = big_list)[i], "_before08", sep = ""), window(big_list[[i]], start=c(1981,1), end=c(2007, 12))  )
}

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用方便的list2env功能,但您需要先编辑列表以获得所需的输出:

# New List to edit
big_list_before08 <- big_list
# change your observations
big_list_before08 <- lapply(big_list_before08, function(x) window(x, start = c(1981,1), 
                                                                     end = c(2007,12)))
# change the individual list element names
names(big_list_before08) <- paste0(names(big_list),"_before08")

# save to the global environment
list2env(big_list_before08, envir = .GlobalEnv)

如果您有任何疑问,请与我联系!