R包:写入内部数据,但不能一次全部写入

时间:2018-07-17 14:49:07

标签: r devtools r-package

我正在使用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更好,更适当和/或有意?以这种方式采购其他文件时容易受到错误和健忘的影响。

1 个答案:

答案 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")