Извините, но я не понимаю, почему слишком много людей даже думают, что строка - это то, что можно оценить. Вы должны изменить свое мышление, правда.
Забудьте все связи между строками на одной стороне и выражениями, вызовами, оценкой на другой стороне.
(возможно) единственное соединение - через parse(text = ....)
, и все хорошие программисты на R должны знать, что это редко является эффективным или безопасным средством для создания выражений (или вызовов). Скорее узнайте больше о substitute()
, quote()
и, возможно, о возможности использования do.call(substitute, ......)
.
fortunes::fortune("answer is parse")
# If the answer is parse() you should usually rethink the question.
# -- Thomas Lumley
# R-help (February 2005)
Дек. 2017: Хорошо, вот пример (в комментариях нет хорошего форматирования):
q5 <- quote(5+5)
str(q5)
# language 5 + 5
e5 <- expression(5+5)
str(e5)
# expression(5 + 5)
и если вы станете более опытным, вы узнаете, что q5
- это "call"
, тогда как e5
- это "expression"
, и даже этот e5[[1]]
идентичен q5
:
identical(q5, e5[[1]])
# [1] TRUE