Добавление нескольких столбцов в data.table, где имена столбцов хранятся в векторе
Я хочу добавить большое количество столбцов в data.table в r. Заголовки столбцов хранятся в векторе. Как это сделать?
x <- data.table(a=1,b=1)
f <- function(x) {list(0)}
Следующие работы:
x <- x[, c("col1","col2","col3") := f()]
но следующее не делает:
a <- c("col1","col2","col3")
x <- x[, a := f()]
Как добавить столбцы, определенные в a
?
1 ответ
Решение
Для того, чтобы сделать эту работу, вы должны обернуть a
в ()
как это:
x[, (a) := f()]
это приводит к следующему датированному:
> x a b col1 col2 col3 1: 1 1 0 0 0
Пояснение: когда вы используете x[, a:=f()]
Вы назначаете результат f()
в столбец a
(data.table
позволяет это для удобства). таким образом a
рассматривается как имя в этом случае. Когда вы используете (a)
, a
трактуется как выражение (в данном случае вектор имен столбцов).
Кроме того: вам не нужно назначать это x
снова с x <-
как данные обновляются по ссылке, потому что :=
оператор используется.