R语言 提取带点传递的字符串的名称

ee7vknir  于 2023-10-13  发布在  其他
关注(0)|答案(3)|浏览(110)

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

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

data(iris)
data(swiss)

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

提取...(dots)参数中传递的 Dataframe 的名称。
但是如何提取传递的多个 Dataframe 的每个名称呢

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

当此函数只返回第一个对象的名称时。

dm7nw8vv

dm7nw8vv1#

我不会在这里使用substitute,它与... 1一起工作得很糟糕。相反,您可以使用以下命令捕获未计算的点:

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

然后你可以得到点里面的参数:

sapply(dots, deparse)

我认为,部分原因是substitute在使用(a)参数(是一个“promise”对象)或(b)另一个对象调用时会做完全不同的事情。...福尔斯落在这两者之间的某个地方。

xj3cbfub

xj3cbfub2#

您可以尝试以下操作:

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

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

4dc9hkyq3#

另一种选择是使用rlang包(基于H.威克姆,高级R,第19.3.2节):

names_from_dots <- function(...) as.character(rlang::ensyms(...))
names_from_dots(swiss, iris)
# [1] "swiss" "iris"

相关问题