提取在R中用点传递的数据帧的名称

Mar*_*ski 7 r ellipsis

可以使用deparse(substitute())组合来提取函数内部的参数名称,就像这个函数一样

names_from_dots <- function(...) {
    deparse(substitute(...))
 }

data(iris)
data(swiss)

names_from_dots(iris)
#[1] "iris"
names_from_dots(swiss)
#[1] "swiss"
Run Code Online (Sandbox Code Playgroud)

提取传入...(点)参数的data.frame的名称.

但是如何提取传递的多个data.frames的每个名称

names_from_dots(swiss, iris)
[1] "swiss"
names_from_dots(iris, swiss)
[1] "iris"
Run Code Online (Sandbox Code Playgroud)

这只返回第一个对象的名称.

Kon*_*lph 10

我根本不会substitute在这里使用,它与...1一起工作很糟糕.相反,您可以使用以下方法捕获未评估的点:

dots = match.call(expand.dots = FALSE)$...
Run Code Online (Sandbox Code Playgroud)

然后你可以在点内得到参数:

sapply(dots, deparse)
Run Code Online (Sandbox Code Playgroud)

1部分原因是,我认为,substitute当使用(a)参数(这是"承诺"对象)或(b)另一个对象调用时,它会完全不同....落在这两者之间的某个地方.


A5C*_*2T1 6

您可以尝试以下方法:

names_from_dots <- function(...) sapply(substitute(list(...))[-1], deparse)

names_from_dots(swiss, iris)
# [1] "swiss" "iris" 
Run Code Online (Sandbox Code Playgroud)