【问题标题】:Same function but with two different names in an R package using roxygen2?相同的功能,但在使用 roxygen2 的 R 包中有两个不同的名称?
【发布时间】:2026-01-08 06:30:02
【问题描述】:

我想在 roxygen2 制作的 R 包中创建两个完全相同但名称不同的函数。

期望的结果

为了清楚起见,假设

first <- function(x) {
  x + 2
}

我想要另一个函数second 这样

identical(first, second)
# [1] TRUE

到目前为止我所知道的

A function can be given an alias,但这并不意味着它的别名是一个可调用的函数——而是意味着你可以将?myalias 调用到display the help file for the original function。但是myalias 不是包中的可调用函数 - 即,除了? 之外,您实际上不能将其用于任何其他用途。

来自 Hadley 的文档:

别名是主题的另一个名称,可以与 ? 一起使用。

一个不优雅的解决方案

通过蛮力可以使用两个不同名称的相同函数 - 即通过复制声明原始函数的文件并在重复代码中简单地更改其名称。

这显然是乏味的,违反了DRY,并引入了膨胀。

问题

有没有更好的方法;不涉及大规模重复代码的一种?

【问题讨论】:

    标签: r roxygen2


    【解决方案1】:

    使用

    #' @rdname first
    #' @export
    second <- first
    

    你的例子

    所以如果first.R 最初看起来像这样

    #' A function that adds 2
    #' @name first
    #' @usage first(x)
    #' @param x a number
    #' @export
    
    first <- function(x) {
      x + 2
    }
    

    然后像这样简单地包含额外的代码行(最后 3 行都是变化的)

    #' A function that adds 2
    #' @name first
    #' @usage first(x)
    #' @param x a number
    #' @export
    
    first <- function(x) {
      x + 2
    }
    
    #' @rdname first
    #' @export
    second <- first
    

    【讨论】:

      最近更新 更多