我正在更新一个旧的包,并缩短了一堆非常长的函数名.如何让用户知道旧函数已被弃用?我用roxygen2来记录所有东西,所以我想知道我是否应该使用#' @alias?思想?

推荐答案

尽管您只是在缩短函数名,但我仍然会像对待包的公共API的任何更改一样大张旗鼓地对待它:在引入新函数时,对旧函数进行弃用/失效阶段.

在第一阶段中,对于每个想要缩短名称的函数(我们称之为transmute_my_carefully_crafted_data_structure_into_gold),保留一个带有该签名的函数,但将所有实际代码移到新命名的函数中(我们称之为alchemy).

最初:

transmute_my_carefully_crafted_data_structure_into_gold <- function(lead, alpha=NULL, beta=3) {
  # TODO: figure out how to create gold
  # look like we are doing something
  Sys.sleep(10)
  return("gold")
}

新名称的首次发布:

transmute_my_carefully_crafted_data_structure_into_gold <- function(lead, alpha=NULL, beta=3) {
  .Deprecated("alchemy") #include a package argument, too
  alchemy(lead=lead, alpha=alpha, beta=beta)
}

alchemy <- function(lead, alpha=NULL, beta=3) {
  # TODO: figure out how to create gold
  # look like we are doing something
  Sys.sleep(10)
  return("gold")
}

因此,transmute_my_carefully_crafted_data_structure_into_gold开始时是一个围绕alchemy的薄型包装,再加上一个.Deprecated调用.

> transmute_my_carefully_crafted_data_structure_into_gold()
[1] "gold"
Warning message:
'transmute_my_carefully_crafted_data_structure_into_gold' is deprecated.
Use 'alchemy' instead.
See help("Deprecated") 
> alchemy()
[1] "gold"

如果更改为alchemy,它仍然由transmute_my_carefully_crafted_data_structure_into_gold携带,因为它只调用前者.但是,即使alchemy更改签名,也不会更改transmute_my_carefully_crafted_data_structure_into_gold的签名;在这种情况下,您需要尽可能地将旧参数映射到新参数中.

在以后的版本中,可以将.Deprecated更改为.Defunct.

> transmute_my_carefully_crafted_data_structure_into_gold()
Error: 'transmute_my_carefully_crafted_data_structure_into_gold' is defunct.
Use 'alchemy' instead.
See help("Defunct")

请注意,这是一个错误并停止;它不会直接拨打alchemy.

在以后的版本中,你可以完全删除这个函数,但我会把它作为路标保留在这个状态.

你提到使用罗克赛根.当您第一次转换为Disprecated时,您可以将@rName更改为package Disprecated,在描述的开头添加一行,表明它已被弃用,并将新函数添加到@seeAllow.当它更改为defunct时,将@rdname更改为package defunct.

R相关问答推荐

多重插补后如何按组汇总平均值?

try 在Powershell中运行R(编程语言)会重复最后一个命令

如果R上的不同时期之间的值发生了变化,则创建假人

用dDeliverr用第二个表更新一个表

重复组的运行计数

基于两个现有列创建新列

为什么stat_bin在R中的ggplot中显示错误的数字?

使用lapply的重新定位功能

如何使用rmarkdown和kableExtra删除包含折叠行的表的第一列的名称

过滤器数据.基于两列的帧行和R中的外部向量

如何在一次运行中使用count进行多列计数

未识别时区

使用整齐的计算(curl -curl )和杂音

使用rest从header(h2,h3,table)提取分层信息

解析R函数中的变量时出现的问题

展开对数比例绘图的轴(添加填充)

如何识别倒排的行并在R中删除它们?

我需要使用ggplot2制作堆叠条形图

将文本批注减少到gglot的y轴上的单个值

注释不会绘制在所有ggplot2面上