Как каждый извлекает название переменной в функции, которая вызвана от другой функции в R?

Мой вопрос состоит в том, как извлечь название переменной от функции, которая вызвана в другой функции в R?

Для иллюстрирования вот, пример:

a <- function(variable) {

    print(deparse(substitute(variable)))

    internala(substitute(variable))

}

internala <- function(variableXX) {

    namex=deparse(substitute(variableXX))

    print(namex)
}

Вызывание функции a дает следующий результат:

>a(whatever)

[1] "whatever"

[1] "substitute(variable)"

что означает, что я могу извлечь название переменной whatever от a, но не от internala.

Какие-либо мысли об этом?

Любая справка будет цениться!

Maria

5
задан Alex Brown 22 February 2010 в 13:01
поделиться

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)

Как предлагает Хэдли, лучше передавать имена напрямую. Я обычно делаю примерно так:

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")
3
ответ дан 13 December 2019 в 22:06
поделиться

Вам лучше не возиться с заменой и друзьями - скорее всего, вы создадите функцию, против которой будет очень трудно программировать. Почему бы просто не передать имя переменной явно в виде строки?

6
ответ дан 13 December 2019 в 22:06
поделиться

Вот кое-что, что работает для меня. Однако я не уверен, что это оптимальное решение

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)
}
1
ответ дан 13 December 2019 в 22:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: