我正在尝试更改列表中包含的所有 xts 的第一个数据,但我似乎无法弄清楚 lapply
执行此操作的语法如何。我尝试过:
b = lapply(a, function(a) a[1,]=1)
但这会删除所有其他行的数据。有谁知道寻址第一个数据并修改它的正确语法。
谢谢
最佳答案
您的内部函数返回 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
因此,匿名分配版本要快得多。
关于r - 使用 lapply 修改列表中包含的 xts 的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46407483/