Ответ 1
Хорошо, тогда,
Используйте get(mycol)
, потому что вы хотите, чтобы аргумент dt[
был содержимым объекта "mycol". Я считаю, что dt[mycol ...]
ищет "mycol" thingie в самом объекте data.table
, из которого, конечно, такого животного нет.
У меня есть data.table
, который я хочу фильтровать на основе некоторых критериев неравенства:
dt <- data.table(A=letters[1:3], B=2:4)
dt
# A B
# 1: a 2
# 2: b 3
# 3: c 4
dt[B>2]
# A B
# 1: b 3
# 2: c 4
Вышеупомянутое хорошо работает как решение для векторного сканирования. Но я не могу понять, как объединить это с именами переменных для столбцов:
mycol <- "B"
dt[mycol > 2]
# A B // Nothing has changed
# 1: a 2
# 2: b 3
# 3: c 4
Как мне обойти это? Я знаю, что могу использовать двоичный поиск, установив ключи с помощью setkeyv(dt, mycol)
, но я не вижу способа выполнения двоичного поиска на основе некоторых критериев неравенства.
Хорошо, тогда,
Используйте get(mycol)
, потому что вы хотите, чтобы аргумент dt[
был содержимым объекта "mycol". Я считаю, что dt[mycol ...]
ищет "mycol" thingie в самом объекте data.table
, из которого, конечно, такого животного нет.
Для этого предусмотрена функция доступа. j
оценивается в кадре X
, т.е. ваш data.table
, если вы не укажете with = FALSE
. Это будет канонический способ сделать это.
dt[ , mycol , with = FALSE ]
B
1: 2
2: 3
3: 4
Столбец возврата, логическое сравнение, строки подмножества...
dt[ c( dt[ , mycol , with = FALSE ] > 2 ) ]
Другой альтернативой является использование ]]
для извлечения B в виде вектора и подмножества, используя это:
dt[dt[[mycol]] > 2]