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
Кроме того, у вас есть два метода с именем method 1 .... существует ли способ 2? – Frank