NB:此问题不是How to use R's ellipsis feature when writing your own function?的副本。那个问题询问如何使用省略号,特别是"如何[1]将省略号从函数的签名转换为例如列表?"下面我不会问任何类似的事情。我在问为什么我使用省略号无法产生预期的结果。
例如,下面的函数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] "..."
我做错了什么?
答案 0 :(得分:1)
是因为envir
中base::ls
的默认参数是as.environement(pos)
吗?
假设您在全球环境中工作,添加envir = gloal.env()
似乎对我有用。
答案 1 :(得分:1)
好的,我发现了问题。 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, ...)
}