Как получить имя переменной в R (заменить)?

Я сложил с попыткой передать переменную через несколько функций, и на конечной функции я хочу получить имя исходной переменной. Но похоже, что функция замены в R выглядела только в "локальной" среде или только на один уровень выше. Ну, позвольте мне объяснить это кодом:

fun1 <- function (some_variable) {deparse(substitute(some_variable)}
fun2 <- function (var_pass) { fun1 (var_pass) }
my_var <- c(1,2) # I want to get 'my_var' in the end
fun2 (my_var) # > "var_pass"

Ну, похоже, мы печатаем имя переменной, которая передается только в fun1. Документация замены говорит нам, что мы можем использовать аргумент env, чтобы указать, где мы можем искать. Но проходя мимо!--4-->.Мировой или .BaseNamespaceEnv в качестве аргумента для замены я получил еще более странные результаты - "some_variable"

Я считаю, что ответ находится в этой функции с использованием аргумента env, поэтому, не могли бы вы объяснить мне, как это работает и как я могу получить то, что мне нужно. Заранее спасибо!

2 ответов


Я предлагаю вам рассмотреть возможность передачи необязательного значения имени этим функциям. Я говорю это, потому что кажется, что вы действительно хотите использовать имя в качестве метки для чего-то в конечном результате; поэтому на самом деле не сама переменная имеет значение, а ее имя. Вы могли бы сделать

fun1 <- function (some_variable, name=deparse(substitute(some_variable))) {
    name
}
fun2 <- function (var_pass, name=deparse(substitute(var_pass))) { 
    fun1 (var_pass, name) 
}
my_var <- c(1,2)

fun2(my_var)
# [1] "my_var"

fun1(my_var)
# [1] "my_var"

таким образом, если у вас есть какое-то нечетное имя переменной и что дать лучшее имя результату, у вас, по крайней мере, есть опция. И по умолчанию он должен делать то, что вы хотите, не требуя параметр имени.


один хак, вероятно, не лучший способ:

fun2 <- function (var_pass) { fun1 (deparse(substitute(var_pass))) }

fun1 <- function (some_variable) {(some_variable))}

fun2(my_var)
# "my_var"

и вы могли бы работать get на что. Но, как предполагает пол Х.,есть лучшие способы отслеживать переменные.