【问题标题】:How to add/update an object in the internal R package data (`R/sysdata.rda`)?如何在内部 R 包数据(`R/sysdata.rda`)中添加/更新对象?
【发布时间】:2022-08-20 19:34:03
【问题描述】:

我有一个带有内部数据的 R 包(按设计存储在 R/sysdata.rda 中)。我想更新其中的一个对象,或向其中添加一个对象。

usethis 包有 use_data()use_data_raw(),但它们不(并且似乎不会)支持这种可能性(参见 r-lib/usethis#1512r-lib/usethis#1091)。

什么是实现这一目标的好方法?我不想干扰我的全局(用户)环境。

    标签: r r-package r-usethis


    【解决方案1】:
    问题说明

    根据usethis::use_data() documentation,确实不可能这样做,因为... 必须包含“要保存的现有对象的不带引号的名称”(因此您不能添加带有对象的列表)并且没有add 参数:

    use_data(
      ...,
      internal = FALSE,
      overwrite = FALSE,
      compress = "bzip2",
      version = 2,
      ascii = FALSE
    )
    
    use_data_raw(name = "DATASET", open = rlang::is_interactive())
    
    解决方案

    您可以将当前的sysdata.rda 加载到单独的环境中,对其进行更改(通过添加更改对象),然后使用save() 再次保存它(use_date() 实际上在内部调用):

    # create new environment
    my_new_env <- new.env(hash = FALSE)
    
    # load current internal data into this new environment
    load("R/sysdata.rda", envir = my_new_env)
    
    # add or replace some objects
    my_new_env$dataset123 <- data.frame(a = 1, b = 2)
    
    # save the environment as internal package data
    save(list = names(my_new_env),
         file = "R/sysdata.rda",
         envir = my_new_env)
    

    尽管为了获得最佳便携性和使用最少的空间,您可能希望使用:

    save(list = names(my_new_env),
         file = "R/sysdata.rda",
         ascii = FALSE,
         version = 2,
         compress = "xz",
         envir = my_new_env)
    

    而已!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-23
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 2021-02-05
      • 2018-10-09
      相关资源
      最近更新 更多