#r #metaprogramming #non-standard-evaluation
#r #метапрограммирование #нестандартная оценка
Вопрос:
Если я сделаю это:
parse(text="foo()")
Я получаю:
expression(foo())
Но что мне действительно нужно, так это:
foo()
Итак, в основном "foo()"
-> foo()
Кроме того, если я попытаюсь:
as.symbol("foo()")
Я получаю:
`foo()`
Мне не нужны галочки
Комментарии:
1. Попробуйте
eval(as.symbol("foo"))
.2. Вы можете попробовать функцию ‘get’ или ‘eval’ для работы с выводом синтаксического анализа. Я не уверен, что вы хотите распечатать функцию без кавычек или оценить что-то, что находится в кавычках? Используйте функцию noquote для строк для печати без кавычек. Или печатать с помощью quote= FALSE
3. Во-первых, вы не должны использовать синтаксический анализ таким образом. Использование синтаксического анализа не является правильным метапрограммированием. Затем: parse(text=»foo()»)[[1]] выдает вам вызов.
Ответ №1:
Что-то вроде этого?
foo <- function(x) pi*x
eval(as.symbol("foo"))(1:10)
#[1] 3.141593 6.283185 9.424778 12.566371 15.707963 18.849556 21.991149
#[8] 25.132741 28.274334 31.415927
Возвращаемое значение eval(.)
может быть присвоено объекту, и это будет функция.
f <- eval(as.symbol("foo"))
f
#function(x) pi*x
f(2)
#[1] 6.283185
Комментарии:
1. Я не хочу оценивать выражение. Я просто хочу выражение без отметок.