You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 02:33:29