使用lapply修改列表中包含的xts的数据

时间:2017-09-25 14:18:48

标签: r list lapply xts

我正在尝试更改列表中包含的所有xts的第一个数据,但我似乎无法弄清楚lapply执行此操作的语法。我尝试过:

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

但是这会消除所有其他行。数据。有没有人知道正确的语法来解决第一个数据并修改它。

由于

1 个答案:

答案 0 :(得分: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

因此,匿名分配版本要快得多。