繁体   English   中英

如何在没有for循环的情况下打印R function的进度条?

[英]How to print progress bar of R function without for loop?

我有一个 function 需要很长时间才能运行(涉及大型数据集中的许多计算)。 我想包括一个进度条,看看它是否正在取得进展。 我的 function 没有 for 循环; 如果 function 中没有 for 循环,我不明白如何添加进度条。

我尝试添加一个for循环来使进度条工作,但它只是打印进度条而不进行计算(我相信),即当我打印result时我得到NULL

install.packages("svMisc")
require("svMisc")

# Test function
funct<-function(a,b,c)for (i in 0:101){
  progress(i, progress.bar=TRUE)
  Sys.sleep(0.01)
  x<-a*a
  y<-x+b
  z<-y/2
  if (i == 101) message("Done!")
}

result <- funct(-2.6e+70,-2.5e+121,6)
result

随意提出svMisc以外的建议。

通常,正如您在示例中所述,报告 function 的进度将需要一个循环(或可能需要多行代码)。 您的示例正在执行计算,它只是不返回它们 - 请记住 R 函数返回最后一次计算的值,除非有明确的return()语句。 在这种情况下, message() function 返回NULL

下面对您的代码进行的小修改演示了进度条的预期行为,然后是具有计算值的result

install.packages("svMisc")
require("svMisc")

# Test function
funct<-function(a,b,c){
  for (i in 0:101){
    progress(i, progress.bar=TRUE)
    Sys.sleep(0.01)
    x<-a*a
    y<-x+b
    z<-y/2
    if (i == 101) message("Done!")
  }
  return(z)
}

result <- funct(-2.6e+70,-2.5e+121,6)

#           0%---------25%---------50%---------75%--------100%
# Progress: ||||||||||||||||||||||||||||||||||||||||||||||||||
# Done!

result

# [1] 3.38e+140

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM