2017-09-25 33 views
2

我試圖更改列表中包含的所有xt的第一個數據,但我似乎無法弄清楚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

相關問題