Изменение нескольких столбцов с помощью набора в data.table - PullRequest
1 голос
/ 17 апреля 2020

Я пытаюсь изменить строки и столбцы в data.table, используя set для эффективности.

В документации по set говорится, что аргумент j: "Имя (я) столбца (символ) ) или число (число) (целое число), которому должно быть присвоено значение, если столбец (столбцы) уже существуют, и только имена столбцов, если они должны быть созданы. "

и значение аргумента:" Список значений замены, назначаемых по ссылке на x [i, j]. "

Однако я получаю сообщение об ошибке. Это пример кода:

iris = as.data.table(iris)
set(iris,i=1L,j=as.integer(1:3),value=list(1:3))

это ошибка, которую я получаю:

Ошибка в наборе (радужная оболочка, i = 1L, j = as.integer (1 : 3), значение = список (1: 3)): Поставлено 3 элемента для назначения 1 элементу столбца «Sepal.Length». Если вы хотите sh «переработать» RHS, используйте rep (), чтобы прояснить это намерение читателям вашего кода.

Я знаю, что могу использовать другие альтернативы для его назначения, но set НАМНОГО более эффективен. Я хотел бы знать, возможно ли это.

Спасибо!

1 Ответ

1 голос
/ 17 апреля 2020

Если мы используем set для нескольких столбцов, то l oop it

library(data.table)
for(j in 1:3) set(iris, i = 1L, j = j, value = j)
head(iris, 2)
#   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1:          1.0         2.0          3.0         0.2  setosa
#2:          4.9         3.0          1.4         0.2  setosa

В base R, это можно сделать проще

data(iris)
iris[1, 1:3] <- as.list(1:3)
head(iris, 2)
#  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1          1.0           2          3.0         0.2  setosa
#2          4.9           3          1.4         0.2  setosa
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...