如何在R中显示长例程的中间步骤?
在R中运行长例程时,是否可以显示中间步骤 例如,我正在使用一个例程,基于空模型包bipartite构建原始矩阵的随机版本: 根据计算机的处理能力和N的大小,完成例行程序需要很长时间。我想包括一个代码,在控制台上显示例程第一部分和第二部分的所有中间步骤。比如矩阵1,矩阵2。。。矩阵 你能帮帮我吗?谢谢大家! 1 cat您可以向函数中添加cat、消息或打印语句 2跟踪,或者如果不想修改函数本身,则按如下方式跟踪:如何在R中显示长例程的中间步骤?,r,loops,social-networking,bipartite,sna,R,Loops,Social Networking,Bipartite,Sna,在R中运行长例程时,是否可以显示中间步骤 例如,我正在使用一个例程,基于空模型包bipartite构建原始矩阵的随机版本: 根据计算机的处理能力和N的大小,完成例行程序需要很长时间。我想包括一个代码,在控制台上显示例程第一部分和第二部分的所有中间步骤。比如矩阵1,矩阵2。。。矩阵 你能帮帮我吗?谢谢大家! 1 cat您可以向函数中添加cat、消息或打印语句 2跟踪,或者如果不想修改函数本身,则按如下方式跟踪: # test function fun <- function(x) lengt
# test function
fun <- function(x) length(x)
trace(fun, quote(print(i <<- i + 1)))
i <- 0
out <- sapply(iris, fun)
要扭转这种局面,请使用untracefun
3包装器另一种可能是创建包装器。flush.console是可选的,具有避免控制台缓冲的效果,因此您可以立即看到输出
wrap_fun <- function(x) { print(i <<- i + 1); flush.console(); fun(x) }
i <- 0
out <- sapply(iris, wrap_fun)
另请参见?txtProgressBar和?winProgressBar窗口,以及其他可用进度条的进度包。1 cat您可以向函数添加cat、消息或打印语句
2跟踪,或者如果不想修改函数本身,则按如下方式跟踪:
# test function
fun <- function(x) length(x)
trace(fun, quote(print(i <<- i + 1)))
i <- 0
out <- sapply(iris, fun)
要扭转这种局面,请使用untracefun
3包装器另一种可能是创建包装器。flush.console是可选的,具有避免控制台缓冲的效果,因此您可以立即看到输出
wrap_fun <- function(x) { print(i <<- i + 1); flush.console(); fun(x) }
i <- 0
out <- sapply(iris, wrap_fun)
另请参见?txtProgressBar和?winProgressBar窗口,以及其他可用进度条的进度包。亲爱的Grothendieck,非常感谢您的回复。然而,我试着使用你建议的代码,但不起作用。我使用了两个函数nullmodel和computeModules,它们构建在一个R包的二分体中,所以我不能修改它。如果我使用建议的第一个解决方案跟踪,我如何将脚本放入其中?谢谢。您可以跟踪包中的函数。跟踪帮助文件中甚至有一个示例。谢谢。我已经阅读了此帮助,但没有找到解决方案。我再看看。亲爱的格罗森迪克,非常感谢你的回复。然而,我试着使用你建议的代码,但不起作用。我使用了两个函数nullmodel和computeModules,它们构建在一个R包的二分体中,所以我不能修改它。如果我使用建议的第一个解决方案跟踪,我如何将脚本放入其中?谢谢。您可以跟踪包中的函数。跟踪帮助文件中甚至有一个示例。谢谢。我已经阅读了此帮助,但没有找到解决方案。我再看看。
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)