Шаблоны для выражения выражения в R

Многие пакеты R допускают функции, которые принимают выражения в качестве аргументов. Некоторые, однако, идут на шаг дальше. Например, plyr Пакет от @hadley смело определяет функцию с именем .:

> .
function (..., .env = parent.frame()) 
{
    structure(as.list(match.call()[-1]), env = .env, class = "quoted")
}
<environment: namespace:plyr>

В моем окружении ?'.' выдает "Помощь не найдена для темы в любом пакете." На первый взгляд это выглядит .() предоставляет механизм для отложенной оценки, который автоматически фиксирует окружающую среду:

> x <- c(1,2,3)
> dot <- .(x + 10)
> dot
List of 1
 $ x + 10: language x + 10
 - attr(*, "env")=<environment: R_GlobalEnv> 
 - attr(*, "class")= chr "quoted"
> dot[[1]]
x + 10
> eval(dot[[1]])
[1] 11 12 13

Это все, что происходит? Я понимаю цель env атрибут, но почему class = "quoted" важный?

При всех различных механизмах R должен определять выражения, а также оценку задержек и сил, каковы некоторые преимущества и издержки использования схемы .() при передаче выражений?

1 ответ

Решение

От ?'.'

подробности

Подобные трюки могут быть выполнены с заменой, но когда функции могут вызываться несколькими способами, становится все сложнее обеспечить извлечение значений из правильного фрейма. Трюки с заменой также затрудняют программирование для функций, которые их используют, в то время как цитируемый класс предоставляет as.quoted.character для преобразования строк в соответствующую структуру данных.

Другие вопросы по тегам