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

未加载R包时如何在函数内访问包内数据?

问题原因

用usethis::use_data(my_data)默认创建的是公开懒加载数据集,这类数据存储在包的package:myPkg环境中,而非包的命名空间(namespace:myPkg):

  • 执行library(myPkg)时,package:myPkg会被加入搜索路径,函数能找到my_data;
  • 用myPkg::c_my_data(2)调用时,函数运行在包的命名空间内,直接引用my_data会在命名空间中查找,自然找不到数据。

解决方案

方案1:保留公开数据集属性,函数内部显式加载

修改c_my_data.R中的函数,在内部用utils::data()将数据集加载到函数运行环境:

#' Data Adder
#' @param x a number
#' @export
c_my_data <- function(x) {
  # 显式加载my_data到当前函数环境
  utils::data("my_data", envir = environment())
  c(my_data, x)
}

这种方式既保留my_data作为公开数据集的属性(用户仍可通过data(my_data)或加载包后访问),又能保证不加载包时函数正常调用。

方案2:将数据设为包内部专用(不对外公开)

如果my_data仅作为函数内部依赖,无需对外暴露,可将其设置为内部数据:

  1. 修改data-raw/datasets.R中的代码,添加internal = TRUE参数:
# called from datasets.R in project data-raw folder
my_data <- c("A")
usethis::use_data(my_data, internal = TRUE)
  1. 删除data.R文件(内部数据无需生成文档)。
  2. 重新构建包后,my_data会被放入包的命名空间,原函数无需修改即可通过myPkg::c_my_data(2)正常调用。

注意:此方案下用户无法直接访问my_data,适合纯内部依赖的数据场景。

内容的提问来源于stack exchange,提问作者Richard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 00:52:46