Вы можете использовать colSums
, что намного проще и быстрее, чем зацикливание.
dt <- data.table(va=c(1,0,1), vb=c(1,0,0), vc=c(1,1,1))
col.names <- c("va", "vc")
dt[, colSums(.SD==1), .SDcols = col.names]
# va vc
# 2 3
Примечание: Я изменил имена ваших объектов на dt
и col.names
, потому что не рекомендуется использовать базовые функции в качестве имен.
Если вы действительно хотите использовать for
l oop (я не рекомендую его, но в образовательных целях ...) вы можете исправить это, используя get
, чтобы использовать значения столбца, а не столбец имя сам
for (col in col.names) {
dt[get(col) == 1, print(.N)]
}