В R, как превратить символ в дословное выражение?

#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. Я не хочу оценивать выражение. Я просто хочу выражение без отметок.