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