以下是我想做的事情:
as.character(quote(x))
[1] "x"
现在我想把它放在一个函数中。
qq <- function(a) as.character(substitute(a))
qq(x)
[1] "x"
精细。但是:
qq <- function(...) as.character(substitute(...))
qq(x,y,z)
[1] "x"
好的,怎么样:
qq <- function(...) sapply(..., function (x) as.character(substitute(x)))
qq(x,y,z)
Error in get(as.character(FUN), mode = "function", envir = envir) :
object 'y' of mode 'function' was not found
并且:
qq <- function(...) sapply(list(...), function (x) as.character(substitute(x)))
qq(x,y,z)
Error in lapply(X = X, FUN = FUN, ...) : object 'z' not found
有办法做到这一点吗?
答案 0 :(得分:3)
您可以尝试match.call
foo <- function(...) {
sapply(as.list(match.call())[-1], deparse)
}
foo(x, y, z)
# [1] "x" "y" "z"
foo(a, b, c, d, e)
# [1] "a" "b" "c" "d" "e"
如果还有其他参数,您可能需要对上述功能进行一些修改。
foo2 <- function(x, ...) {
a <- as.list(match.call(expand.dots = FALSE))$...
sapply(a, deparse)
}
foo2(5, x, y, z)
# [1] "x" "y" "z"
答案 1 :(得分:2)
试试这个:
qq <- function(...) sapply(substitute({ ... })[-1], deparse)
qq(a, b, c)
## [1] "a" "b" "c"
注意: qq <- function(...) as.character(substitute(...))
如果传递了一个参数qq(a)
,那么问题就在于substitute
期待一个参数,而不是几个。 {...}
将多个参数转换为一个。