如何从R中的另一个函数调用的函数中提取变量的名称?

Mar*_*ria 5 variables r extract

我的问题是如何从R中另一个函数调用的函数中提取变量的名称?

为了说明,这是一个例子:

a <- function(variable) {

    print(deparse(substitute(variable)))

    internala(substitute(variable))

}

internala <- function(variableXX) {

    namex=deparse(substitute(variableXX))

    print(namex)
}
Run Code Online (Sandbox Code Playgroud)

调用该函数 a 会得到以下结果:

>a(whatever)

[1] "whatever"

[1] "substitute(variable)"
Run Code Online (Sandbox Code Playgroud)

这意味着我可以提取变量的名称whatevera,但不能从internala.

有什么想法吗?

任何帮助将不胜感激!

玛丽亚

had*_*ley 6

你最好不要与替补和朋友混在一起 - 你可能会创建一个非常难以编程的功能.为什么不直接将变量的名称作为字符串传递?


Mar*_*rek 3

您可以更改a函数来替换internala函数的参数及其eval

a <- function(variable) {
    print(deparse(substitute(variable)))
    eval(substitute(internala(variable))) # this is only change
}

internala <- function(variableXX) {
    namex=deparse(substitute(variableXX))
    print(namex)
}

a(whatever)
Run Code Online (Sandbox Code Playgroud)

正如哈德利建议的那样,最好直接传递名称。我通常会做这样的事情:

a <- function(variable, vname=deparse(substitute(variable))) {
    print(vname)
    internala(variable, vname)
}

internala <- function(variableXX, namex=deparse(substitute(variableXX))) {
    print(namex)
}

a(whatever)
Run Code Online (Sandbox Code Playgroud)

每个函数都可以在不传递名称的情况下调用,但您可以覆盖它。例如:

a(whatever, "othername")
Run Code Online (Sandbox Code Playgroud)