如何正确使用R语言progress包的progress_bar$message()方法?
解决progress包中progress_bar$message()调用错误的问题
我正在学习使用progress包创建美观的进度条,基础示例可正常运行,但无法正确使用progress_bar$message()功能在进度条上方打印自定义消息。文档仅简要描述:
progress_bar$message()用于在进度条上方打印消息,若进度条已完成则调用失败。
但我多次尝试都遇到"attempt to apply non-function"错误,以下是我的测试代码:
library(progress) #> Warning: package 'progress' was built under R version 4.4.0 # 基础示例可正常运行 pb <- progress_bar$new(total = 100) for (i in 1:100) { pb$tick() Sys.sleep(1 / 100) } # 以下尝试均失败 pb <- progress_bar$new(total = 100) for (i in 1:100) { pb$tick() Sys.sleep(1 / 100) progress_bar$message("test") Sys.sleep(1 / 100) } #> Error in progress_bar$message("test"): attempt to apply non-function pb <- progress_bar$new(total = 100) for (i in 1:100) { pb$tick() Sys.sleep(1 / 100) progress_bar$message() Sys.sleep(1 / 100) } #> Error in progress_bar$message(): attempt to apply non-function pb <- progress_bar$new(total = 100) for (i in 1:100) { pb$tick() Sys.sleep(1 / 100) progress_bar$message(print()) Sys.sleep(1 / 100) } #> Error in progress_bar$message(print()): attempt to apply non-function
问题原因与解决方案
出错的核心是混淆了类和实例对象的调用逻辑:progress_bar是进度条的类,而message()是属于你创建的进度条实例(比如代码中的pb)的方法,不能直接通过类名调用。
正确的做法是调用你初始化的进度条实例的message()方法,示例代码如下:
library(progress) # 正确使用message()的示例 pb <- progress_bar$new(total = 100) for (i in 1:100) { pb$tick() Sys.sleep(1 / 100) # 每完成20%进度打印一次自定义消息 if (i %% 20 == 0) { pb$message(sprintf("当前进度:%d%%", i)) } }
这段代码会在进度条上方周期性打印自定义消息,且不会触发错误。注意不要在进度条完成(即pb$tick(total)之后)调用message(),否则会触发文档中提到的调用失败。
内容的提问来源于stack exchange,提问作者rempsyc
相关产品推荐
相关产品推荐

