我正在使用usethis
/ devtools
开发R包。该软件包中有一些我想保留在内部的对象,只是为了防止混乱。我使用的结构是根据对象的来源将它们放在不同的文件中,这些文件全部位于我的data-raw
文件夹中。例如,文件make_laus_codes.R
为劳工统计局的两个查询代码准备数据帧(内部称为laus_codes
),文件make_decennial_tables.R
为十年一次的人口普查准备了查询代码(包括内部decennial_nums
)。
如果像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
更好,更适当和/或有意?以这种方式采购其他文件时容易受到错误和健忘的影响。
答案 0 :(得分:3)
虽然此解决方案不使用 usethis
,但我相信它可以简洁地解决您的问题:
# Let's say you've saved this sysdata in the past
laus_codes <- data.frame(
area = c("Connecticut", "Fairfield County", "Hartford County"),
code = c("ST0900000000000", "CN0900100000000", "CN0900300000000")
)
usethis::use_data(laus_codes, internal = TRUE)
# Updating sysdata with objects you've created just now
decennial_nums <- c("H002", "H003", "H004", "H005", "H006")
sysdata_filenames <- load("R/sysdata.rda")
save(list = c(sysdata_filenames, "decennial_nums"), file = "R/sysdata.rda")