Как получить имя переменной в 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
на что. Но, как предполагает пол Х.,есть лучшие способы отслеживать переменные.