0
我需要将一系列值(value_range)与数据表行中的值进行比较,然后将结果编译为value_range中每个值的总和。向量与每行数据表的向量R的比较很慢
下面的方法#1显示了我正在尝试做的最好的事情。 10次循环仅用于比较系统时间。
nb_values = 300
value_range = c(1:nb_values)
nb_rows = 1000
d = data.table(c1 = rep(c(10,30,60,80), (nb_rows/4)) , c2 = rep(2,nb_rows))
res1 = data.table(rep(0,nb_values))
res2 = data.table(rep(0,nb_values))
# METHOD 1
system.time(
for(i in (1:10))
{
for(i in value_range) res1[i] <- d[, sum((i>c1) & (i>c2)),]
}
)
# user system elapsed
# 6.973 0.000 6.982
# METHOD 2
f <- function(i)
{
d[, sum((i>c1) & (i>c2)),]
}
system.time(
for(i in (1:10))
{
res2 <- apply(cbind(value_range), 1, f)
}
)
# user system elapsed
# 3.152 0.000 3.161
identical(as.integer(res1$V1), res2)
# [1] TRUE
有没有一种方法可以进一步提高速度?
也许你应该用*词*来提问。特别是,你可以解释你正在试图用这些循环做什么,而不是让我们解析它。 – Frank
这可能是我没有看到的东西,但你到底想要达到什么目的? – Heroka
另外,你有两个方法名为方法1 ....是否意味着是方法2? – Frank