【发布时间】:2014-06-27 17:55:31
【问题描述】:
我正在尝试编写一个函数,如果该列表元素小于列表中的任何先前值,则该函数会将列表元素添加到另一个列表。我有一个可用的非矢量化版本:
myList <- c(14, 35, 12, 54, 67, 8, 32, 3, 78)
minVec <- function(x){
# Return a list of all numbers from x which are less than any previous number in the list
outList <- list(x[1])
for(i in 2:length(x)){
if(x[i] < min(x[1:i - 1])){
outList <- c(outList, x[i])}
}
return(unlist(outList))
}
minVec(myList)
但我需要在许多列表中多次执行此操作,并且我想使用 lapply 来加快速度。问题是对于列表x 的每个元素n,我需要能够找到子集x[1:n - 1] 的最小值。这可以在 lapply (或以其他方式矢量化)中完成吗?如何说“对于此列表的每个元素,如果该元素小于列表中的任何先前值,则将该元素添加到新列表中”?
【问题讨论】:
标签: r functional-programming vectorization apply lapply