используя имеешь в виду .sd и .sdcols в данных.таблица


Я пишу очень простую функцию для суммирования столбцов данных.таблицы. Я проходя один столбец в то время функции, а затем делать диагностику, чтобы выяснить, нужным для реферирования, а потом делать обобщения. Я делаю это в данных.таблица позволяет для некоторых очень больших наборов данных.

.SDcols.SDj

Итак, я использую, чтобы пройти в колонне обобщение и использование функций в части данных.табличное выражение. Поскольку я передаю по одному столбцу за раз, я не используя lapply. И то, что я обнаруживаю, что некоторые функции работают, а другие нет. Ниже представлен тестовый набор данных, с которыми я работаю, и результаты я вижу:

dt <- data.table(  a=1:10,   b=as.factor(letters[1:10]),   c=c(TRUE, FALSE),   d=runif(10, 0.5, 100),   e=c(0,1),   f=as.integer(c(0,1)),   g=as.numeric(1:10),   h=c("cat1", "cat2", "cat3", "cat4", "cat5"))mean(dt$a)[1] 5.5dt[, mean(.SD), .SDcols = "a"][1] NAWarning message:In mean.default(.SD) : argument is not numeric or logical: returning NAdt[, sum(.SD), .SDcols = "a"][1] 55dt[, max(.SD), .SDcols = "a"][1] 10dt[, colMeans(.SD), .SDcols = "a"]  a 5.5 dt[, lapply(.SD, mean), .SDcols = "a"]     a1: 5.5
weighted.meanweighted.mean(.SD)lapply(.SD, weighted.mean)

Интересно, дает неправильный ответ (55, сумма), когда я использую в J. Но когда я использую в J, он дает правильный ответ (5.5, средний).

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

mean().SDlapply.SDlapply

Может быть, это просто проблема с помощью в списке (который, кажется, что возвращается)? Я думаю, там никогда не причина, чтобы не использовать парадигмы ? Кажется, что только опция возвращает данные.таблица. Остальные, похоже, вернуться векторов, за исключением colMeans, который возвращает что-то другое (перечислить?).

mean(.SD)

Мой главный вопрос-почему не работает. И, как следствие, является ли .SD можно использовать при отсутствии одного из применять функции.

Спасибо.