Как начать с этого .Синтаксис SD для набора синтаксиса с данными.таблица?

#r #data.table #set

Вопрос:

Из foo.in data.table, и благодаря помощи, которую я смог получить здесь, мне удается получить то, что я хотел : foo.out.

 set.seed(123)
foo.in <- data.table(id = rep(LETTERS[1:10], each = 10),
                  code = sample(c(111, 222, 333, 444), 100, replace = TRUE),
                  cof = rep(runif(10, 1, 10), each = 10),
                  x1 = sample(0:1, 100, replace = TRUE),
                  x2 = sample(0:1, 100, replace = TRUE),
                  x3 = sample(0:1, 100, replace = TRUE),
                  x4 = sample(0:1, 100, replace = TRUE),
                  x5 = sample(0:1, 100, replace = TRUE),
                  x6 = sample(0:1, 100, replace = TRUE))

foo.out <- foo.in[, lapply(.SD, function(x) uniqueN(code[x==1]) * cof), 
                    .SDcols = grep("^x\d $", names(foo.in)), 
                     by = .(id, cof)]
 

Это работает нормально, но с очень большой таблицей data.table я хотел бы протестировать другой синтаксис с for помощью and set .

Документируя себя, я понял, что в зависимости от случая это может быть быстрее, чем использование .SD . Даже если окажется, что это не так, это хорошее упражнение для изучения и выполнения моих собственных тестов.

Но я не могу сделать это с помощью этого синтаксиса…

Моя попытка :

 cols <- paste0("x", c(1:6))
for (c in cols) { set(foo.in, j = c, value = ...) }
 

Спасибо!!

Комментарии:

1. foo.in составляет 100 строк. foo.out это 10 строк. Вы агрегируете и обобщаете данные. Хотя set() это может быть полезно для некоторых вариантов использования, этот пример не является отличным вариантом использования из-за агрегирования.

2. @Cole О, хорошо, спасибо, я думал, что все наоборот. Спасибо вам за информацию. Но, может быть, вы могли бы помочь мне найти правильный синтаксис с set() помощью ? Я все еще не могу этого сделать.

3. Я не могу придумать логический способ агрегирования при использовании набора. Пожалуйста , посмотрите ?set , но основной вариант использования set -это когда вам приходится звонить [.data.table много раз, и вы хотите меньше накладных расходов. В исходном примере вы звоните только [.data.table один раз. Наконец, посмотрите свое » значение = … . This is hard! and it is hard because we need to aggregate. And one way to aggregate efficiently is to directly aggregate within a [.данные.таблица` вызов.