列表元素的输出数 `l_dply` 将函数应用于

Output number of element of a list `l_dply` applies a function to

当使用 l_ply 将函数应用于列表的每个元素时,我如何生成一个输出,显示该函数暂时应用到的列表元素的编号? 它类似于进度条(l_dply(list, function, .progress = progress_text(char = '*')),但我想要的是指示元素在当前正在由函数处理的列表中的位置。

例如,如果我的列表有 100 个元素,我希望应用该函数的每次迭代输出 1 到 100。

我正在使用带有下载器功能的 l_ply,所以我的最终目标是能够找出无法下载的列表元素。

也许这对你有用:

l_ply2<- function(.data, .fun = NULL, ..., .progress = "none", .inform = FALSE,
                   .print = FALSE, .parallel = FALSE, .paropts = NULL){
  i <- 0
  fun2 <- function(x){
    i <<- i+1
    print(i)
    .fun(x)
  }
  plyr::l_ply(.data, fun2, ..., .progress = .progress, .inform = .inform,
         .print = .print, .parallel = .parallel, .paropts = .paropts)
}

l_ply2(list("a","b","c"),print)
# [1] 1
# [1] "a"
# [1] 2
# [1] "b"
# [1] 3
# [1] "c"

编辑:

我修复了它以使用省略号 (...),虽然它很丑,是那种通常让我投反对票的丑陋 :),不管怎样,如果可以的话,请帮助我让它变得漂亮:

l_ply2<- function(.data, .fun = NULL, ..., .progress = "none", .inform = FALSE,
                   .print = FALSE, .parallel = FALSE, .paropts = NULL){
  i <- 0
  str <- paste0(deparse(args(.fun))[1],
                "{i<<-i+1;print(i);",
                as.character(substitute(.fun)),
                "(",paste(paste(formalArgs(.fun),"=",formalArgs(.fun)),collapse=","),")}")
  fun2 <- eval(parse(text = str))
  plyr::l_ply(.data, fun2, ..., .progress = .progress, .inform = .inform,
         .print = .print, .parallel = .parallel, .paropts = .paropts)
}

l_ply2(list("a","b","c",123.456),print,digits=4)
# [1] 1
# [1] "a"
# [1] 2
# [1] "b"
# [1] 3
# [1] "c"
# [1] 4
# [1] 123.5