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

如何使用R包box重新加载本地自定义模块?

使用R包box重新加载本地模块的问题解决

问题背景

环境设置

先开发helper.R函数:

# helper.R
helper <- function(i) {
  return(paste("help", i))
}

随后在wrapper.R中调用该函数:

# wrapper.R
box::use(./helper[helper])
lapply(1:3, helper)

运行结果符合预期:

r$> lapply(1:3, helper)
[[1]]
[1] "help 1"

[[2]]
[1] "help 2"

[[3]]
[1] "help 3"

问题描述

不重启R会话的前提下修改helper.R:

# helper.R
helper <- function(i) {
  return(paste("Please help", i))
}

尝试用box::reload(./helper[helper])或box::reload("helper")加载更新后的函数时,出现错误:

"reload" expects a module object, got "helper", which is not a module alias variable

核心误解在于:box::reload()需要的是模块对象,而非box::name()返回的模块名称字符串或单个导出函数。

解决方法

方法1:导入时保留模块对象引用

修改wrapper.R的导入逻辑,直接导入整个模块并保留别名:

# wrapper.R
box::use(./helper)
# 调用函数
lapply(1:3, helper$helper)

修改helper.R后,直接调用reload传入模块对象即可:

box::reload(helper)
# 再次调用会使用更新后的函数
lapply(1:3, helper$helper)

方法2:已导入单个函数时的补救方案

如果已经只导入了单个函数,可重新导入整个模块并更新函数引用:

# 导入整个模块到临时对象
helper_mod <- box::use(./helper)
# 重新加载模块
box::reload(helper_mod)
# 更新本地的helper函数
helper <- helper_mod$helper
# 验证更新
lapply(1:3, helper)

关键说明

  • box::reload()的参数必须是模块对象(即box::use导入的模块别名),而非模块名称字符串或单个导出函数。
  • box::name()返回的是模块的名称标识,并非可直接传入reload的对象。

内容的提问来源于stack exchange,提问作者Daniel M Bader

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:30:27