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

如何提取从R中的另一个函数调用的函数中的变量名?,r,variables,extract,R,Variables,Extract,我的问题是如何从R中另一个函数调用的函数中提取变量名 为了说明,以下是一个示例: a <- function(variable) { print(deparse(substitute(variable))) internala(substitute(variable)) } internala <- function(variableXX) { namex=deparse(substitute(variableXX)) print(name

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

为了说明,以下是一个示例:

a <- function(variable) {

    print(deparse(substitute(variable)))

    internala(substitute(variable))

}

internala <- function(variableXX) {

    namex=deparse(substitute(variableXX))

    print(namex)
}
这意味着我可以从
a
中提取变量
的名称,但不能从
internala
中提取

有什么想法吗

任何帮助都将不胜感激


玛丽亚

这是一个适合我的东西。但是我不确定这是否是最佳解决方案

a <- function(variable) {
print(deparse(substitute(variable)))
my_command <- paste('internala(',substitute(variable),')',sep = '')
eval(parse(text = my_command))
}

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

a您可以更改
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)

你最好不要和替补和朋友混在一起——你可能会创建一个很难编程的函数。为什么不直接将变量的名称作为字符串显式传递?

;使用字符串名更直接。这很有帮助(谢谢),但在函数内部,我必须执行
var,以便弄清楚,您想要的行为是什么?我猜你想把
a(随便什么)
打印两次
随便什么?如果同时执行
internala(whatever)
是否也希望输出为
whatever
?如果你调用foo怎么办?是的,你猜对了,我希望a(whatever)打印两次,internala(whatever)打印两次,而我实际上被卡住的地方正是你指出的,也就是说,如果我有另一个基于上一个例子的函数foo,看起来你想把表达式一直扩展到顶级调用,但是没有别的了?因此,如果还存在foo2 Upvote,因为它似乎起到了作用,除了两个小的诡辩:1)你应该取消替代品的parse,否则如果你调用a(b+1),你会得到一个错误。2.)根据maria的评论,你也必须向上看。
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)
a <- function(variable, vname=deparse(substitute(variable))) {
    print(vname)
    internala(variable, vname)
}

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

a(whatever)
a(whatever, "othername")