在R中运行apply函数时有没有办法打印迭代次数[关闭]
Posted
技术标签:
【中文标题】在R中运行apply函数时有没有办法打印迭代次数[关闭]【英文标题】:Is there a way to print the number of iteration when running an apply function in R [closed] 【发布时间】:2016-10-03 23:06:46 【问题描述】:我在一个大数据集上运行了一个 apply-family 函数,所以我想知道是否有办法知道到目前为止这项工作的进展情况、到目前为止查看了多少元素或类似的东西?
【问题讨论】:
查看包pbapply (progress-bar-apply)apply(..., function(x) print(whatever); do_whatever())
@lukeA 嗯,对 pbapply 印象不是很深刻,它增加了很多开销,比较以下:tbp <- txtProgressBar(1,2000000)
,x <- lapply(1:2000000,function(y) setTextProgressBar(tpb,getTxtProgressBar(tpb) + 1);y + 1)
与 x <- pblapply(1:2000000,function(y) y + 1)
后者需要几分钟,前者可能需要 10秒
在flush.console()中使用forloop,见***.com/questions/5249317/…
How to be alerted about the ongoing progress of a loop/lapply的可能重复
【参考方案1】:
您可以考虑创建一个全局计数器,并指定何时打印进度,例如,您可以在处理完 10% 的数据时打印通知;
counter <- 0
data <- rnorm(100)
results <- sapply(data, function(x)
counter <<- counter + 1;
if(counter %in% seq(0, length(y), 10))
print(paste(counter, "% has been processed")))
[1] "10 % has been processed"
[1] "20 % has been processed"
[1] "30 % has been processed"
[1] "40 % has been processed"
[1] "50 % has been processed"
[1] "60 % has been processed"
[1] "70 % has been processed"
[1] "80 % has been processed"
[1] "90 % has been processed"
[1] "100 % has been processed"
【讨论】:
为什么不只是print(i)
?
传递给函数的数据可能比他想看到的更具体。他只是想知道进度,所以最好有一个单独的counter
。我这里只是举个例子,实际上他的数据应该比1:5
更复杂,不一定能反映进度。【参考方案2】:
你可以像这样在你正在使用的函数中添加一个打印语句
apply(mtcars,2, function(i) print(i[1])
mean(i))
不漂亮,但做你想做的事
【讨论】:
以上是关于在R中运行apply函数时有没有办法打印迭代次数[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
R语言问题剖析20篇-R语言泛函式编程purrr实现优雅循环迭代
R语言问题剖析20篇-R语言泛函式编程purrr实现优雅循环迭代