1)猫您可以添加cat
,message
或print
报表功能。
2)跟踪,或者如果你不想修改函数本身则trace
这样说:
# test function
fun <- function(x) length(x)
trace(fun, quote(print(i <<- i + 1)))
i <- 0
out <- sapply(iris, fun)
,并提供:
Tracing FUN(X[[i]], ...) on entry
[1] 1
Tracing FUN(X[[i]], ...) on entry
[1] 2
Tracing FUN(X[[i]], ...) on entry
[1] 3
Tracing FUN(X[[i]], ...) on entry
[1] 4
Tracing FUN(X[[i]], ...) on entry
[1] 5
为了扭转这一使用untrace(fun)
。
3)包装另一种可能性是创建一个包装。 flush.console
是可选的,并且具有避免控制台缓冲的效果,因此您可以立即看到输出。
wrap_fun <- function(x) { print(i <<- i + 1); flush.console(); fun(x) }
i <- 0
out <- sapply(iris, wrap_fun)
4)tkProgressBar一种有些发烧友的方法是使用一个进度条。此示例代码使用tcltk软件包,它是所有标准R发行版中的开箱即用软件包(因此您无需下载并安装它 - 它已经存在,并且library
语句足以加载它)。
library(tcltk)
fun2 <- function(x) Sys.sleep(2) # test function
wrap_fun2 <- function(x) {
i <<- i + 1
setTkProgressBar(bar, i, label=i)
fun2(x)
}
bar <- tkProgressBar("Progress", max = 5)
i <- 0
out <- sapply(iris, wrap_fun2)
close(bar)
另见?txtProgressBar
和?winProgressBar
(仅Windows)以及进度包可用其它进度条。
亲爱的格洛腾迪克,非常感谢你的回复。但是,我尝试使用您建议的代码,但它不起作用。我使用两个函数(nullmodel和computeModules),它们构建在R包(二部分)中,所以我不能修改它。如果我使用建议的第一个解决方案(跟踪),我如何使用我的脚本?谢谢。 – Marco
你可以跟踪包中的函数。 “trace”帮助文件中甚至有一个例子。 –
谢谢。我已阅读此帮助,但未找到解决方案。我会再看看。 – Marco