Я использую пакет data.table
.
library(data.table)
df = data.table(col1 = c(2,4,6),
col2 = c(4,6,8),
col3 = c(8,10,12),
col4 = c(20,16,14))
i = 2
df[,3]
df[,i+1]
df[,i]
df[,..i]
df[,..(i+1)]
df[,3]
дает третий столбец:
col3
1: 8
2: 10
3: 12
Но df[,i+1]
дает только цифру 3
. Вот чего я не понимаю. Он отлично работает для собственного data.frame. Почему он не может работать так, как data.frame?
Кроме того, df[,i]
возникла ошибка, которая предлагает мне использовать df[,..i]
и выдает второй столбец.
Тем не менее, df[,..(i+1)]
возникла ошибка: Error in ..(i + 1) : could not find function ".."
.
Кто-нибудь поможет мне понять различия?
Расскажите о различиях между этими попытками. Какой здесь механизм?
Вы можете прочитать справочный документ data.table
и узнать, как использовать with =
при вводе ?..
.
> df[, i + 1, with = FALSE]
col3
<num>
1: 8
2: 10
3: 12
> df[, i + 1]
[1] 3
По умолчанию with=TRUE и j оценивается в пределах x; столбец имена можно использовать в качестве переменных. В случае перекрытия имен переменных внутри набора данных и в родительской области вы можете использовать префикс с двойной точкой ..cols для явной ссылки на родительскую область переменной cols, а не на ваш набор данных.
Когда j — вектор символов имен столбцов, числовой вектор позиции столбца для выбора или в форме startcol:endcol и Возвращаемое значение всегда представляет собой таблицу data.table. with=FALSE не требуется больше для динамического выбора столбцов. Обратите внимание, что x[, cols] эквивалентно x[, ..cols] и x[, cols, with=FALSE] и x[, .SD, .SDcols=столбцы].
Я это понимаю. Но все равно непонятно, почему df[,i+1]
дает только номер 3
. Я обновил data.table
до 1.15.4 (версия R 4.2.1), и он по-прежнему ведет себя так же.
Возможно, это не то, что вы спрашиваете, но я бы предпочел использовать
df[, .SD, .SDcols = i+1]
илиdf[[i+1]]
, если вам просто нужен вектор.