【发布时间】:2018-12-25 08:00:33
【问题描述】:
我正在使用usethis/devtools 开发一个 R 包。这个包有一些我想保留在内部的对象,只是为了减少混乱。我使用的结构是根据它们的源在不同的文件中创建对象,所有这些都在我的data-raw 文件夹中。例如,文件make_laus_codes.R 准备了来自劳工统计局的两个查找代码数据帧(一个内部,称为laus_codes),文件make_decennial_tables.R 准备了来自十年人口普查的查找代码(包括内部,@ 987654328@)。
如果我拨打usethis::use_data(data_name, internal = TRUE) 之类的电话,如果sysdata.rda 文件已经创建并且我没有选择覆盖它,则会收到错误消息;如果我选择覆盖,它会覆盖整个内容,而不是我预期的内容,即将第二个对象附加到sysdata.rda。
Store multiple objects in sysdata.rda: R-package development 的公认答案是调用usethis::use_data(laus_codes, decennial_nums, internal = TRUE),但那里的评论提出了一个问题,即如果这些对象不是同时创建的怎么办,这就是我想了解的地方。
我的结构的简化版本如下:
data-raw/make_laus_codes.R:
laus_codes <- data.frame(
area = c("Connecticut", "Fairfield County", "Hartford County"),
code = c("ST0900000000000", "CN0900100000000", "CN0900300000000")
)
data-raw/make_decennial_tables.R:
decennial_nums <- c("H002", "H003", "H004", "H005", "H006")
data-raw/make_internal_data.R:
source("./make_laus_codes.R")
source("./make_decennial_tables.R")
usethis::use_data(laus_codes, decennial_nums, internal = TRUE)
这可行,但感觉很尴尬,就像我错过了执行此操作的预期方式。有没有一种更好、更合适和/或usethis 想要的方法来做到这一点?以这种方式获取其他文件感觉容易出现错误和健忘。
【问题讨论】:
-
我会在每个 R 脚本的末尾添加相应的
usethis::use_data。 -
@F.Privé 问题在于,对于内部数据,它只会写入
sysdata.rda,所以如果我尝试多次调用usethis::use_data(internal = T),它要么不能,因为该文件已存在,或必须覆盖。 -
嗯,好的。
one-file-to-source-them-all.R呢? -
@F.Privé 这基本上就是我在这里所做的。它似乎并不像应有的那样万无一失,就像在某些时候我确定我会更新
make_decennial_tables中的某些内容,但忘记然后重新运行make_internal_data以将其保存到sysdata.rda。