Я уверен, что будут лучшие ответы на этот вопрос, и я с нетерпением жду их чтения. Желание оценить результаты предполагает, что они склонны к оценке, но если любой неизвестный ввод принят, никто не может быть уверен.
В зависимости от того, куда движется ваш конвейер, изучите варианты quote
или expression
.
as.character(quote(function() 1))
[1] "function" "NULL"
[3] "1" "c(1, 20, 1, 31, 20, 31, 1, 1)"
as.character(expression(1 + 2))
[1] "1 + 2"
as.character(eval(expression(1+2)) # works in this case
[1] "3"
as.character(eval(expression(1+2, 'A') # what would this be?
[1] "A" # so nonsense
Другой подход может заключаться в том, чтобы выяснить, что за вещь в дикой природе вам передается, а затем решить, что с ней делать:
as.character(typeof(function() 1))
[1] "closure" # not safe or just pass along "closure" and move on
as.character(typeof(new.env())
[1] "environment" # not safe
as.character(typeof(expression(1+2))
[1] "expression" # safe (maybe) for further manipulation, replace typeof with eval
Но typeof
не застрахован от других пользовательских ошибок на пути к оцененным результатам
as.character(typeof(function(x) 1, 'a'))
Error in typeof(function(x) 1, "a") : unused argument ("a")
Я нахожу это интересным вопросом, потому что я всегда предполагал, что есть способ рендерить строки любого объекта в R, хотя путь может быть запутанным.
С наилучшими пожеланиями вы будете знать весь ваш проект и то, где вы пытаетесь контролировать оценку.