R:区分 EMPTY 省略号和包含 NULL 的省略号?
R: Differentiating EMPTY ellipsis from one containing NULL?
想象一下:
myfunct <- function(x, ...){
dots <- list(...)
...
}
如何在函数执行过程中区分点是从 myfunct('something')
(没有点)还是 myfunct('something', NULL)
(点包括显式 NULL
)派生的?
在我的实验中,这两种情况都会导致 is.null(dots)
等同于 TRUE
。
有帮助吗?
f <- function(x, ...){
missing(...)
}
> f(2)
[1] TRUE
> f(2, NULL)
[1] FALSE
g <- function(x, ...){
length(list(...))
}
> g(2)
[1] 0
> g(2, NULL)
[1] 1
我最终得出以下结论:
myfunct <- function(...)
{
my_dots <- match.call(expand.dots = FALSE)[['...']]
no_dots <- is.null(my_dots)
# Process the dots
if(!no_dots)
{
my_dots <- lapply(my_dots, eval)
}
# Exemplary return
return(my_dots)
}
这产生:
> myfunct(1)
[[1]]
[1] 1
> myfunct(NULL)
[[1]]
NULL
> myfunct()
NULL
> myfunct(1, NULL, 'A')
[[1]]
[1] 1
[[2]]
NULL
[[3]]
[1] "A"
想象一下:
myfunct <- function(x, ...){
dots <- list(...)
...
}
如何在函数执行过程中区分点是从 myfunct('something')
(没有点)还是 myfunct('something', NULL)
(点包括显式 NULL
)派生的?
在我的实验中,这两种情况都会导致 is.null(dots)
等同于 TRUE
。
有帮助吗?
f <- function(x, ...){
missing(...)
}
> f(2)
[1] TRUE
> f(2, NULL)
[1] FALSE
g <- function(x, ...){
length(list(...))
}
> g(2)
[1] 0
> g(2, NULL)
[1] 1
我最终得出以下结论:
myfunct <- function(...)
{
my_dots <- match.call(expand.dots = FALSE)[['...']]
no_dots <- is.null(my_dots)
# Process the dots
if(!no_dots)
{
my_dots <- lapply(my_dots, eval)
}
# Exemplary return
return(my_dots)
}
这产生:
> myfunct(1)
[[1]]
[1] 1
> myfunct(NULL)
[[1]]
NULL
> myfunct()
NULL
> myfunct(1, NULL, 'A')
[[1]]
[1] 1
[[2]]
NULL
[[3]]
[1] "A"