列表元素的输出数 `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
当使用 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