【问题标题】:R package: writing internal data, but not all at onceR包:写入内部数据,但不是一次全部
【发布时间】: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

标签: r devtools r-package


【解决方案1】:

虽然此解决方案不使用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")

【讨论】:

  • 谢谢!这可能仍然需要我在尝试添加任何新内容之前检查 sysdata 中已经写的内容,但这可能比仅仅假设更好
猜你喜欢
  • 1970-01-01
  • 2020-11-27
  • 1970-01-01
  • 1970-01-01
  • 2017-05-20
  • 2022-01-01
  • 2022-01-04
  • 2014-09-24
  • 1970-01-01
相关资源
最近更新 更多