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

时间:2016-02-10 14:16:53

标签: r

可以使用deparse(substitute())组合来提取函数内的参数名称,如此函数

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

data(iris)
data(swiss)

names_from_dots(iris)
#[1] "iris"
names_from_dots(swiss)
#[1] "swiss"

提取在...(点)参数中传递的data.frame的名称。

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

names_from_dots(swiss, iris)
[1] "swiss"
names_from_dots(iris, swiss)
[1] "iris"

当它只返回第一个对象的名称时。

2 个答案:

答案 0 :(得分:7)

我根本不会在这里使用substitute,它与... 1 的效果很差。相反,您可以使用以下方法捕获未评估的点:

dots = match.call(expand.dots = FALSE)$...

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

sapply(dots, deparse)

1 我认为部分原因是substitute在使用(a)参数(这是“承诺”对象)或(b)调用时完全不同的事情)另一个对象。 ...介于这两者之间。

答案 1 :(得分:6)

您可以尝试以下操作:

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

names_from_dots(swiss, iris)
# [1] "swiss" "iris"