2017-06-20 11 views
0

私の目的は、変数リストからいくつかの時系列サブセットを作成することです。私はforループでこれを書いた。しかし、私はループを必要としない、実在するR関数を使って行う方法について、よりエレガントなアイデアを探しています。 Rの新しい機能に関するすべてのアイデアやイントロが高く評価されています。forループの改善:ループのない一連のサブセットの作成

コードの再現性の例:

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

あなたは便利な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) 

は、ご質問があれば、私に教えてください!

+0

ありがとう、これは動作し、それは私が探していたものです。 1つは、Rでループする代わりにlapply/list2envを使用することをお勧めしますか?利点は何ですか?ありがとうございました。 – k1000x

+1

さて、パフォーマンスはさておき、コードはしばしばより洗練されていて、lapplyはforループのようなオブジェクトをあなたの環境に追加しません(反復する用語 'i'など)、あなたは出力がリスト形式であることを知っています。 forループは、複数の異なるオブジェクトを使用したり、複数の異なるオブジェクトを操作したりしているときに同じオブジェクトを反復して再割り当てする場合に使用する方が適しています。適用関数はループより高速ですが、これはすべて文脈的です。私はちょうどあなたの現在のコードに代わるものを提供していました、私は自分自身が 'assign'や' get'関数を使っていることが分かります:) –

関連する問題