2017-09-25 3 views
2

リスト内に含まれているすべてのxtsの最初のデータを変更しようとしていますが、構文がどのようになるかわかりません。lapplyこれをする。私は試しました:lapplyを使用して、リストに含まれるxtsのデータを変更します。

b = lapply(a, function(a) a[1,]=1) 

しかし、これは他のすべての行のデータを消去します。誰でも最初のデータに対処して修正する正しい構文を知っていますか?

おかげ

答えて

5

結果としてa[1,]=1を返すあなたの内部関数は、したがって、あなたは全体のxtsが保存されていませんでした。このような

用途:

b <- lapply(a, function(a) { a[1,] = 1; a }) 

もう一つの方法は、[<-(匿名割り当て)を使用することです:

b <- lapply(a, `[<-`, 1, TRUE, 1) 

library(microbenchmark) 
library(xts) 

data(sample_matrix) 
sample.xts <- as.xts(sample_matrix, descr='my new xts object') 

a <- rep(list(sample.xts), 2000) 

microbenchmark(assign = lapply(a, function(a) { a[1,] = 1; a }), 
       anon_assign = lapply(a, `[<-`, 1, TRUE, 3)) 

Unit: milliseconds 
     expr  min  lq  mean median  uq  max neval 
     assign 33.50660 39.90533 58.75338 43.74316 88.39256 128.15991 100 
anon_assign 29.95665 32.37879 44.80245 34.11000 38.87301 97.35795 100 

。したがって、匿名のアサインバージョンはかなりありますもっと早く。

+0

優れていました。ありがとうございました! –

+0

@NicolásVargas答えが役に立つ場合は、回答としてマークしてください。 – m0nhawk

関連する問題