如何在没有for循环的情况下打印R函数的进度条?
How to print progress bar of R function without for loop?
我有一个函数需要很长时间才能运行(涉及大型数据集中的许多计算)。我想包括一个进度条以查看它是否正在取得进展。我的函数没有 for 循环;如果函数中没有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
以外的建议。
一般来说,报告函数的进度将需要一个循环(或可能需要多行代码),正如您在示例中所述。你的例子 是 执行计算,它只是不 return 计算它们 - 请记住 R 函数 return 最后计算的值,除非有明确的 return()
语句。在这种情况下,message()
函数 returns 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
我有一个函数需要很长时间才能运行(涉及大型数据集中的许多计算)。我想包括一个进度条以查看它是否正在取得进展。我的函数没有 for 循环;如果函数中没有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
以外的建议。
一般来说,报告函数的进度将需要一个循环(或可能需要多行代码),正如您在示例中所述。你的例子 是 执行计算,它只是不 return 计算它们 - 请记住 R 函数 return 最后计算的值,除非有明确的 return()
语句。在这种情况下,message()
函数 returns 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