首页 > 解决方案 > 如何计算 lapply 中向量的序列号?

问题描述

我有一个很大的 vactor (3GB) 可以通过 lapply 进行处理,我想知道它已经进行了多少。如果我能识别它是哪个元素会更容易,但如果我不能呢?

for循环中,我可以在循环内分配一个计数器,但我应该如何在循环内设置一个计数器lapply

X <- LETTERS[1:26]

lapply(X, function(a) {
  cat(paste0(which(X == a), "\r")
  print(a)
})

非常感谢。

标签: rlapply

解决方案


要滚动您自己的进度计数器,只需迭代X' 整数位置,而不是直接迭代X' 元素。以下打印处理的百分比:

X_out <- lapply(seq_along(X), function(a) {
    cat("\r", round((a/length(X))*100), "%", sep = "")
    toupper(X[a])
})

你也可以试试这个progress包。唯一的缺点是它似乎让事情变慢了一点(也许是设计使然,所以你可以看到进度)。你可以尝试这样的事情:

install.packages("progress")
library(progress)

X <- sample(letters, 100000, T)

pb <- progress_bar$new(total = length(X))

X_out <- lapply(X, function(a) {
    pb$tick()
    toupper(a)
})

推荐阅读