函数定义中 `...` 的意外行为

Unexpected behavior from `...` in a function's definition

注意: 这个问题 不是 How to use R's ellipsis feature when writing your own function? 的重复。该问题询问如何使用省略号,特别是 "how can [one] convert the ellipsis from the function's signature into, for example, a list?" 下面我不会问任何此类问题。我在问为什么我使用省略号没有产生预期的结果。


例如,下面的函数 my.lsbase::ls 的包装器,使 all.names = TRUE 成为默认值:

my.ls <- function (...) base::ls(..., all.names = TRUE)

我曾预计,根据这个定义,my.ls() 会产生与 base::ls(all.names = TRUE) 相同的值。令我惊讶的是,这两个表达式的值并不接近。

例如:

% /usr/bin/R --quiet --vanilla
> x <- 3; .y <- 1; z <- 4
> base::ls(all.names = TRUE)
[1] "x"  ".y" "z" 
> my.ls <- function (...) base::ls(..., all.names = TRUE)
> my.ls()
[1] "..."

我做错了什么?

是否因为envirbase::ls中的默认参数是as.environement(pos)

假设您在全球环境中工作,添加 envir = gloal.env() 似乎对我有用。

好的,我想通了。 my.ls 的以下实现更接近我所追求的:

my.ls <- function (name, all.names = TRUE, ...) {
    if (missing(name))
        return(my.ls(parent.frame(1), all.names = all.names, ...))

    base::ls(name, all.names = all.names, ...)
}