R-package中的数据弃用

Dan*_*her 7 r deprecated r-package

在我的一个R-packages中,我有一些我想删除的愚蠢的示例数据.为此,我首先要遵循常用的方法来弃用然后将其解散.

为了从R-package中删除函数,我找到了这样的方法:

oldFunc <- function()
{
    .Deprecated("newFunc")
}
Run Code Online (Sandbox Code Playgroud)

接下来(假设6个月)

oldFunc <- function()
{
    .Defunct("newFunc")
}
Run Code Online (Sandbox Code Playgroud)

然后又过了6个月我可以从包中删除该功能.

但是,如何删除存储/data/myData.rda在包中的数据对象并且还有一些myData.Rd描述?

Rom*_*ain 2

好问题,不幸的是我没有找到答案。
\n因此,我正在分享我为解决此案而起草的内容。我知道它并不完美,但我希望它有用和/或改进。

\n\n

更新

\n\n

因此,在初稿(见下文)之后,我应用了一个似乎是合理(足够好)解决方案的流程。

\n\n

1.移动数据文件

\n\n

第一步是将数据文件从其默认位置移动./data到另一个位置,以避免自动加载 - 即使它是延迟加载。

\n\n

目标位置是./data-raw一个目录,按照惯例用于存储脚本和原始数据,以便能够更新或重现导出的数据集的生成——更多内容请参见《R 包》一书的“数据”章节

\n\n

我按照惯例使用leg_前缀将其标记为旧数据集

\n\n
$ mv ./data/my_data.rda ./data-raw/leg_my_data.rda\n
Run Code Online (Sandbox Code Playgroud)\n\n

2. 编写脚本来转换数据集

\n\n

用于将数据集从旧格式转换为新格式的代码与旧数据集一起存储在 ./data-raw/my_data.R. 这将使整个过程可重复

\n\n
# my_data new version\n\nlibrary(tidyverse)\n\n# Load legacy data -----\nload("data-raw/leg_my_data.rda")\nleg_my_data <- my_data\n\n# Create the new dataset -----\n# Perform here every change that has to be performed\nmy_data <- leg_my_data %>%\n  rename(cat = categ) %>%\n  arrange(categ)\n\n# Write the new dataset ----\nusethis::use_data(my_data, overwrite = TRUE, compress = \'xz\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

获取文件来源即可,新版本已上线!

\n\n
source(\'./data-raw/my_data.R\', echo=TRUE)\n# \xe2\x9c\x93 Saving \'my_data\' to \'data/my_data.rda\'\n# \xe2\x97\x8f Document your data (see \'https://r-pkgs.org/data.html\')\n\nmy_data\n# A tibble: 10 x 2\n#   categ   val\n#   <fct> <int>\n# 1 a         9\n# 2 a         6\n# 3 a         4\n
Run Code Online (Sandbox Code Playgroud)\n\n

3.秘制酱汁

\n\n

在该./R/my_package-package.R文件中,创建一个legacy_mode函数如果用户出于兼容性原因需要使用数据集,则此功能将是用户加载数据集的先前(旧)版本的一种方式方式。

\n\n
#\' Load legacy version of datasets.\n#\'\n#\' Load legacy (previous) version of all the datasets for compatibility reason.\n#\' The environment where data will be loaded can be chosen.\n#\'\n#\' @param envdir the environment where the data should be loaded.\n#\' @param verbose should item names be printed during loading?\n#\'\n#\' @export\nlegacy_mode <- function(envdir = parent.frame(), verbose = TRUE) {\n  .Deprecated(msg = "This function replaces datasets with the previous (legacy) version for compatibility reason")\n  # TODO: To be improved to load a subset of datasets\n  paths <- sort(Sys.glob(c("data-raw/leg_*.rda", "data-raw/leg_*.RData")))\n  for (i in 1:length(paths)) {\n    load(paths[i], envir = envdir, verbose = verbose)\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

4. 结果

\n\n

因此,现在您可以访问默认情况下可用的数据集的新版本,也可以访问旧版本(如果出于兼容性原因需要)。如果使用旧数据,则会显示正确的弃用消息。

\n\n
# The current version\nhead(my_data, 3)\n# A tibble: 3 x 2\n  categ   val\n  <fct> <int>\n1 a         9\n2 a         6\n3 a         4\n\n# Activation of the legacy mode\nlegacy_mode()\n# Loading objects:\n#   my_data\n# Warning message:\n# This function replaces datasets with the previous (legacy) version for # compatibility reason \n\n# Legacy version\nhead(my_data, 3)\n# A tibble: 3 x 2\n#   cat     val\n#   <fct> <int>\n# 1 a         9\n# 2 c         2\n# 3 b         3\n
Run Code Online (Sandbox Code Playgroud)\n\n

不要忘记通过更新 中的数据集文档来记录您的更改R/my_data.R。您可以在注释中提及遗留模式

\n\n

注意:我还写了一篇关于该主题的博客文章,其中包含更多内容。

\n\n

第一稿

\n\n

1. 重命名已弃用的数据

\n\n

目标是将以前的数据移动到一个名为 前缀的文件中dep_。新数据将取代它。

\n\n
# Moving the deprecated data prefixed with dep_\ndep_my_data <- my_data\nusethis::use_data(dep_my_data)\n\n# Overwriting data with the new version of the dataset\nmy_data <- new_data\nusethis::use_data(my_data, overwrite = TRUE)\n
Run Code Online (Sandbox Code Playgroud)\n\n

2. 在文档中声明弃用

\n\n
#\' MyData package\n#\'\n#\' Note: this dataset is the new version. If you want to use the old one for compatibility reason,\n#\' please use instead \\code{\\link{dep_my_data}}.\n#\'\n#\' @docType data\n#\'\n#\' @rdname dep_my_data\n"mydata"\n\n#\' [Deprecated] MyData package\n#\'\n#\' Note: this dataset still exist but will be removed (defunct) in the next version.\n#\' Please use instead \\code{\\link{my_data}}.\n#\'\n#\' @docType data\n#\'\n#\' @rdname dep_my_data\n"dep_mydata"\n
Run Code Online (Sandbox Code Playgroud)\n\n

3. 结果

\n\n
> data()\n\n# dep_mydata   [Deprecated] MyData package\n# mydata       MyData package\n
Run Code Online (Sandbox Code Playgroud)\n