R包:写入内部数据,但不是一次全部
R package: writing internal data, but not all at once
我正在使用 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
.
的公认答案是调用 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
想要的 and/or 的方法?以这种方式获取其他文件感觉容易出现错误和健忘。
虽然此解决方案未使用 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")
我正在使用 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
.
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
想要的 and/or 的方法?以这种方式获取其他文件感觉容易出现错误和健忘。
虽然此解决方案未使用 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")