Какую версию data.table вы используете? Они изменили это некоторое время go (очевидно v1.9.8 ).
Для вашей версии попробуйте with = FALSE
. С help(data.table)
:
По умолчанию с = ИСТИНА и j оценивается в кадре x; имена столбцов могут быть использованы в качестве переменных. В случае перекрывающихся имен переменных внутри набора данных и в родительской области вы можете использовать префикс двойной точки ..cols для явной ссылки на родительскую область переменной 'cols, а не из вашего набора данных.
Когда j является символьным вектором столбца имена, числовой c вектор позиций столбца для выбора или формы startcol: endcol, а возвращаемое значение всегда является data.table. with = FALSE больше не требуется для динамического выбора столбцов.
library(data.table)
df[,"C",with=FALSE]
C
1: 9
2: 10
3: 11
4: 12
Это также работает.
df[,list[3],with=FALSE]
C
1: 9
2: 10
3: 11
4: 12
Чем больше данных.табильный способ сделать это будет C
без кавычек.
df[,C]
[1] 9 10 11 12
Вы можете задаться вопросом, почему df[,"C"]
возвращает data.table
, а df[,C]
возвращает вектор. И это, я бы сказал, хороший вопрос. Я предполагаю, потому что df[,"C"]
похоже на то, как можно было бы подставить data.frame
, которое также вернуло бы data.frame
.
sessionInfo()
R version 3.6.3 (2020-02-29)
data.table_1.12.8