R - Разбор не оцененного значения аргумента после 2 вызовов - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь разобрать не оцененное значение аргумента функции, которая сама передается в качестве аргумента вызывающей функции.

f1 <- function(arg){
  f2(arg)
}
f2 <- function(arg2){
  print(deparse(substitute(arg2)))
}

f1(sometext)

Я бы хотел использовать sometext внутри функции f2 в виде строки, отменив ее разбор и / или используя ее как переменную, добавив в нее значение.

Если я анализирую таким образом, он просто дает имя из вызывающей среды. Мне нужно, чтобы дать имя something. Спасибо

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Если вы не хотите (или не можете) изменить f1(), вы можете использовать lazyeval::expr_find() вместо substitute(). Он найдет оригинальное выражение в стеке вызовов.

f1 <- function(arg) {
  f2(arg)
}

f2 <- function(arg2) {
  deparse(lazyeval::expr_find(arg2))
}

f1(sometext)
#> [1] "sometext"

Создано в 2018-08-28 пакетом Представить (v0.2.0.9000).

0 голосов
/ 28 августа 2018

Неважно, я нашел путь. Просто упомяну это здесь, если кто-то еще столкнется с той же проблемой Решением является замена значения при вызове второй функции.

f2(substitute(arg))

Таким образом, только имя, которому дана первая функция, передается второй.

Код выглядит следующим образом.

f1 <- function(arg){
  f2(substitute(arg))
}
f2 <- function(arg2){
  print(arg2)
}

f1(sometext)'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...