【发布时间】:2022-08-20 19:34:03
【问题描述】:
我有一个带有内部数据的 R 包(按设计存储在 R/sysdata.rda 中)。我想更新其中的一个对象,或向其中添加一个对象。
usethis 包有 use_data() 和 use_data_raw(),但它们不(并且似乎不会)支持这种可能性(参见 r-lib/usethis#1512 和 r-lib/usethis#1091)。
什么是实现这一目标的好方法?我不想干扰我的全局(用户)环境。
我有一个带有内部数据的 R 包(按设计存储在 R/sysdata.rda 中)。我想更新其中的一个对象,或向其中添加一个对象。
usethis 包有 use_data() 和 use_data_raw(),但它们不(并且似乎不会)支持这种可能性(参见 r-lib/usethis#1512 和 r-lib/usethis#1091)。
什么是实现这一目标的好方法?我不想干扰我的全局(用户)环境。
根据usethis::use_data() documentation,确实不可能这样做,因为... 必须包含“要保存的现有对象的不带引号的名称”(因此您不能添加带有对象的列表)并且没有add 参数:
use_data(
...,
internal = FALSE,
overwrite = FALSE,
compress = "bzip2",
version = 2,
ascii = FALSE
)
use_data_raw(name = "DATASET", open = rlang::is_interactive())
您可以将当前的sysdata.rda 加载到单独的环境中,对其进行更改(通过添加更改对象),然后使用save() 再次保存它(use_date() 实际上在内部调用):
# create new environment
my_new_env <- new.env(hash = FALSE)
# load current internal data into this new environment
load("R/sysdata.rda", envir = my_new_env)
# add or replace some objects
my_new_env$dataset123 <- data.frame(a = 1, b = 2)
# save the environment as internal package data
save(list = names(my_new_env),
file = "R/sysdata.rda",
envir = my_new_env)
尽管为了获得最佳便携性和使用最少的空间,您可能希望使用:
save(list = names(my_new_env),
file = "R/sysdata.rda",
ascii = FALSE,
version = 2,
compress = "xz",
envir = my_new_env)
而已!
【讨论】: