函数定义中 `...` 的意外行为
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.ls
是 base::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] "..."
我做错了什么?
是否因为envir
在base::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, ...)
}
注意: 这个问题 不是 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.ls
是 base::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] "..."
我做错了什么?
是否因为envir
在base::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, ...)
}