在R中data.table的行上循环
给定如下定义的数据表在R中data.table的行上循环,r,loops,data.table,R,Loops,Data.table,给定如下定义的数据表 set.seed(123) ds <- data.table(x = rnorm(10), y = rnorm(10), z = rnorm(10)) set.seed(123) ds这里有一种方法: ds[, Reduce('+', lapply(.SD, function(x) -0.5 < x & x < 0.5))] #[1] 0 3 1 2 1 0 2 1 0 2 另外:rowSums(介于(ds,-0.5,0.5,FALSE)之间
set.seed(123)
ds <- data.table(x = rnorm(10), y = rnorm(10), z = rnorm(10))
set.seed(123)
ds这里有一种方法:
ds[, Reduce('+', lapply(.SD, function(x) -0.5 < x & x < 0.5))]
#[1] 0 3 1 2 1 0 2 1 0 2
另外:rowSums(介于(ds,-0.5,0.5,FALSE)之间)
@Arun-yep-我的目标是避免额外的矩阵转换,以保持更快的
和@Arun尝试将之间的部分与上面的N=1e7进行计时;好的,谢谢。将此移到C,看看是否可以获得一些性能。
cols <- c(1,3)
for (i in 1:10) {
print(sum(-0.5 < ds[i,cols,with=F] & ds[i,cols,with=F] < 0.5))
}
ds[, Reduce('+', lapply(.SD, function(x) -0.5 < x & x < 0.5))]
#[1] 0 3 1 2 1 0 2 1 0 2
ds[, Reduce('+', lapply(.SD, function(x) -0.5 < x & x < 0.5)), .SDcols = cols]
#[1] 0 2 0 1 1 0 1 1 0 1