【发布时间】:2021-05-08 16:34:01
【问题描述】:
我有一个结构如下的 S3 对象:
dataset <- NULL
dataset$x <- list(a=runif(10), b=runif(10), c=runif(10))
dataset$y <- list(a=runif(10), b=runif(10), c=runif(10))
两个列表 $x 和 $y 包含相同数量的同名元素。
我需要同时在两个列表之间应用一个函数,如下:
for(i in c('a','b','c')){
subset <- dataset$x[[i]] > 0.5
dataset$x[[i]] <- subset(dataset$x[[i]], subset)
dataset$y[[i]] <- subset(dataset$y[[i]], subset)
}
在实际情况下,列表具有非常多的元素,因此循环不是最快的方法。对这个循环进行矢量化的最佳方法是什么?
谢谢!
【问题讨论】:
-
如果您想就地修改这两个列表,那么
for循环确实是最好(最清晰)的方法。至于“最快的方法”,通常for循环与lapply和类似的一样快(很多年前,这不是真的),因此两者都有明显的优势。
标签: r list vectorization named