出于好奇,我试了以下方法,似乎效果不错。
x <- data.frame(matrix(sample.int(2, 2 * 1000, TRUE), 2, 1000))
f <- function (x, time_limit) {
if (elapsed_time < time_limit) {
t1 <- proc.time()[[3]]
z <- tabulate(sample(x, 1e+5, TRUE))
t2 <- proc.time()[[3]]
elapsed_time <<- elapsed_time + (t2 - t1)
} else {
z <- NULL
}
z
}
elapsed_time <- 0
oo <- lapply(x, f, time_limit = 2)
elapsed_time
sum(sapply(oo, is.null))
所以在我的笔记本电脑上,迭代在(1000-693)=307轮之后终止。
lapply
仍然返回长度为1000的列表,但只有前307个元素保留处理结果,而其余693个条目保留
NULL
实际上,这是一个很好的例子
<<-
会有用的。