在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实现优雅循环迭代

R语言中apply系列函数详解

运行 Xamarin.UITests 时有没有办法让应用程序选择语言或文化

运行作曲家命令时有没有办法隐藏“资金”消息?

如何在R语言中用apply等函数替代for循环