Data.table: использование кавычек или выражений, как я - PullRequest
0 голосов
/ 11 января 2019

Я хочу использовать в качестве кавычки (или выражения) как i в data.table. Но, похоже, это невозможно.

Вот минимальный пример:

library(data.table)

dt <- data.table(a = 1:10)

dt[a == 5,]             # Everything well
dt[quote(a == 5),]      # Error: i has not evaluated to logical, integer or double
dt[expression(a == 5),] # Error: i has not evaluated to logical, integer or double

Страница справки о состоянии data.table для i:

Целое число, логический или символьный вектор, числовая матрица из одного столбца, выражение имен столбцов, список, data.frame или data.table.

Так что я думаю, это должно работать с выражениями. В чем моя ошибка? Или есть ли способ "удалить цитату" из цитаты?

1 Ответ

0 голосов
/ 14 января 2019

Из соображений полноты, вот ответ @nicola, размещенный в виде комментария под вопросом:

Выражение или цитата должны быть заключены в eval(). Для примеров в вопросе это выглядит так:

library(data.table)

dt <- data.table(a = 1:10)

dt[a == 5,]             # Everything well
dt[eval(quote(a == 5)),]      # Now, it works
dt[eval(expression(a == 5)),] # Now, it works

Похоже, секрет в том, что R оценивает аргументы в среде функции, а не в контексте, в котором вызывается функция.

...