Добавление нескольких столбцов в 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 <- как данные обновляются по ссылке, потому что := оператор используется.

Другие вопросы по тегам