【问题标题】:Output number of element of a list `l_dply` applies a function to列表元素的输出编号“l_dply”将函数应用于
【发布时间】:2018-02-14 16:10:41
【问题描述】:

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

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

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

【问题讨论】:

标签: r plyr


【解决方案1】:

也许这对你有用:

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-05-20
  • 2014-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-09
  • 1970-01-01
相关资源
最近更新 更多