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描述?
好问题,不幸的是我没有找到答案。
\n因此,我正在分享我为解决此案而起草的内容。我知道它并不完美,但我希望它有用和/或改进。
因此,在初稿(见下文)之后,我应用了一个似乎是合理(足够好)解决方案的流程。
\n\n第一步是将数据文件从其默认位置移动./data到另一个位置,以避免自动加载 - 即使它是延迟加载。
目标位置是./data-raw一个目录,按照惯例用于存储脚本和原始数据,以便能够更新或重现导出的数据集的生成——更多内容请参见《R 包》一书的“数据”章节。
我按照惯例使用leg_前缀将其标记为旧数据集。
$ mv ./data/my_data.rda ./data-raw/leg_my_data.rda\nRun Code Online (Sandbox Code Playgroud)\n\n用于将数据集从旧格式转换为新格式的代码与旧数据集一起存储在 ./data-raw/my_data.R. 这将使整个过程可重复。
# 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\')\nRun Code Online (Sandbox Code Playgroud)\n\n获取文件来源即可,新版本已上线!
\n\nsource(\'./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\nRun Code Online (Sandbox Code Playgroud)\n\n在该./R/my_package-package.R文件中,创建一个legacy_mode函数。如果用户出于兼容性原因需要使用数据集,则此功能将是用户加载数据集的先前(旧)版本的一种方式方式。
#\' 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}\nRun Code Online (Sandbox Code Playgroud)\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\nRun Code Online (Sandbox Code Playgroud)\n\n不要忘记通过更新 中的数据集文档来记录您的更改R/my_data.R。您可以在注释中提及遗留模式。
注意:我还写了一篇关于该主题的博客文章,其中包含更多内容。
\n\n目标是将以前的数据移动到一个名为 前缀的文件中dep_。新数据将取代它。
# 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)\nRun Code Online (Sandbox Code Playgroud)\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"\nRun Code Online (Sandbox Code Playgroud)\n\n> data()\n\n# dep_mydata [Deprecated] MyData package\n# mydata MyData package\nRun Code Online (Sandbox Code Playgroud)\n