如何弃用参数?

时间:2016-12-01 08:53:02

标签: r

是否有一种在R中弃用参数的标准方法?

示例:对于Web API包,我之前添加了一个paging=TRUE参数,该参数将对所有结果进行分页并下载所有内容。

现在我想要一个limit参数,只有在设置为limit=0时才下载所有内容。这有效地消除了对paging参数的需要,所以我现在需要让人们基本上什么都不做。我该怎么做?

2 个答案:

答案 0 :(得分:1)

如下所示可能适合你?

foo <- function(paging = T, limit = 0) {
  if (!missing("paging"))
    warning("argument deprecated")
}

示例输出:

# > foo()
# > foo(limit = 0)
# > foo(T)
# Warning message:
#   In foo(T) : argument deprecated
# > foo(paging = T)
# Warning message:
#   In foo(paging = T) : argument deprecated

正如@Roland指出的那样,该函数的文档中也应该提到该参数现已弃用。

答案 1 :(得分:1)

我在寻找解决方案来重命名程序包函数的函数参数时找到了这个讨论。这并非完全是您问题的答案,但非常熟悉,我认为解决方案也可能对其他人有所帮助。

因此,要在不损害现有函数调用的情况下重命名函数的参数,我根据@John Smith的答案提出了以下解决方案。

old_arg的功能保留给foo弃用的函数调用,而对于foo新版本的函数调用则忽略。

# old version
foo <- function(x, y, old_arg = c("a", "b", "c")){

   old_arg <- match.arg(old_arg, c("a", "b", "c"))

   if(old_arg == "a"){
      return(x*y)
   }else if(old_arg == "b"){
      return(x+y)
   }else if(old_arg == "c"){
      return(x-y)
   }
}

# new version
foo <- function(x, y, new_arg = c("a", "b", "c"), old_arg = c("a", "b", "c")){

   if (!missing("old_arg")){
      warning("Argument deprecated, use new_arg instead. 
              The parameter new_arg is set equal the parameter old_arg.")
      new_arg <- old_arg
   }

   new_arg <- match.arg(new_arg, c("a", "b", "c"))
   if(new_arg == "a"){
      return(x*y)
   }else if(new_arg == "b"){
      return(x+y)
   }else if(new_arg == "c"){
      return(x-y)
   }
}