【问题标题】:Use lapply to modify the data of an xts contained on a list使用 lapply 修改列表中包含的 xts 的数据
【发布时间】:2018-03-06 13:22:51
【问题描述】:

我正在尝试更改列表中包含的所有 xts 的第一个数据,但我似乎无法弄清楚 lapply 的语法是如何做到这一点的。我试过了:

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

但这会删除所有其他行的数据。有谁知道正确的语法来处理第一个数据并对其进行修改。

谢谢

【问题讨论】:

    标签: r list lapply xts


    【解决方案1】:

    您的内部函数因此返回 a[1,]=1,因此您没有存储整个 xts

    这样使用:

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

    另一种方式是使用[&lt;-(匿名赋值):

    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
    

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

    【讨论】:

    • @NicolásVargas 如果答案有帮助,请将其标记为已回答。
    猜你喜欢
    • 2017-08-14
    • 2016-02-07
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多