我的问题相当基本,尽管我已经做了一些搜索,但找不到解决方案。
我在大型数据集上运行lapply
和自定义函数,并喜欢嵌入message
语句,这样我就可以知道在任何给定的时间点我在流程中走了多远。我注意到,在某些函数中,R将提供一条带有进度的消息,然后删除该消息,以只包含给定的时间快照(即R以%表示进度,比如13%,然后删除进度,以只说明给定时刻的进度,比如15%,而不必看到13%曾经存在(。
如何在lapply
函数或loop
中删除消息?下面是一个小数据集的示例,我在其中显示一条消息,我希望在打印下一条消息时删除该消息。
iris_numcols <- iris %>% select(where(is.numeric)) %>% colnames()
lapply(iris_numcols, function(x){
message(paste0('Calculating mean value of', x))
mean(iris[[x]])
})
输出
Calculating mean value ofSepal.Length
Calculating mean value ofSepal.Width
Calculating mean value ofPetal.Length
Calculating mean value ofPetal.Width
看看txtProgressBar()
是如何实现这一点的,您可以将cat()
与"r"
特殊字符(回车(结合使用,返回控制台中当前行的开头并覆盖它。但是,您不能以这种方式更改当前行以上的任何内容。
iris_numcols <- iris %>% select(where(is.numeric)) %>% colnames()
lapply(iris_numcols, function(x) {
cat(paste('rCalculating mean value of', x))
Sys.sleep(1)
mean(iris[[x]])
})
不过,在某些情况下,这可能会成为问题。引用?txtProgressBar()
:
使用样式2或3或减小样式=1的值使用\r返回到左边距–回车的解释取决于运行r的终端或控制台,这很可能在终端以外的连接上产生难看的输出,包括stdout((重定向到文件时。