首页 > 解决方案 > R:有没有办法覆盖已安装的 R 包中的数据?

问题描述

我构建了一个 R 包 (SemNetDictionaries),其中包含多个包含不同字典词汇表的数据。我想为用户提供一个选项来覆盖这些字典,因为他们将它们与未包含在包的基本字典中的响应一起使用。是否可以允许用户直接在 R 包中附加数据?

  1. 用户已经可以创建自己的单独字典(可以保存到他们的计算机上)

  2. 我已经弄清楚如何使用 tools:::makeLazyLoadDB; 但是,这会在为 CRAN 构建包时引发几个警告(因为这是一个内部函数),并且会损坏包。

# Load R package
library(SemNetDictionaries)

# Loads the "animals" dictionary in package
base <- SemNetDictionaries::load.dictionaries("animals")

# Word to add to dictionary in package
word2add <- "bluebird"

# Get data file names in package
data.files <- data(package="SemNetDictionaries")$results[,"Item"]

# Load data in package
lazyLoad(paste(system.file("data",package="SemNetDictionaries"),"Rdata",sep="/"))

# Update dictionary
.GlobalEnv[["animals.dictionary"]] <- unique(sort(c(base, word2add)))

# Remove all objects in the environment except for updated dictionary
rm(list = setdiff(ls(),data.files))

# Save data to package
tools:::makeLazyLoadDB(.GlobalEnv, paste(system.file("data",package="SemNetDictionaries"),"Rdata",sep="/"))

# Load dictionaries again (words are updated)
SemNetDictionaries::load.dictionaries("animals")

# This, however, corrupts the R package (see error below)
Error in get(data(list = dict.long, envir = environment())) : 
  lazy-load database 'C:\Users\apchrist\Documents\R\win-library\3.6\SemNetDictionaries/data/Rdata.rdb' is corrupt
In addition: Warning message:
In get(data(list = dict.long, envir = environment())) :
  internal error -3 in R_decompress1

标签: rpackageoverwrite

解决方案


推荐阅读