Мой вопрос состоит в том, как извлечь название переменной от функции, которая вызвана в другой функции в 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
Вы можете изменить 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")
Вам лучше не возиться с заменой и друзьями - скорее всего, вы создадите функцию, против которой будет очень трудно программировать. Почему бы просто не передать имя переменной явно в виде строки?
Вот кое-что, что работает для меня. Однако я не уверен, что это оптимальное решение
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)
}