Это можно легко переместить в комментарий, но:
Несколько вещей, на которые стоит обратить внимание, я стараюсь избегать функции by()
, так как ее возвращаемое значение является фанки-объектом. Вместо этого, почему бы не добавить свой вектор indices_forR в data.frame?
df <- data.frame(matrix_senttoR)
df$indices_forR <- indices_forR
пакет plyr выполняет работу отсюда:
ddply(df,.(indices_forR),function(x) zyp.sen(X1~X2,data=x)$coeff[2])
Вы можете легко многопоточность эту операцию, используя doMC или doSnow и аргумент .parallel=TRUE
для ddply.
если цель - скорость, я бы также изучил пакет data.table (который упаковывает data.frame и работает намного быстрее). Кроме того, я предполагаю, что медленная часть - это вызов zyp.sen()
, а не by()
. Выполнение на нескольких ядрах ускорит это.
> dput(df)
structure(list(X1 = c(0.11, 0.23, 0.67, 0.65, 0.12, 0.45), X2 = c(0.95,
0.34, 0.54, 0.95, 0.54, 0.43), indices_forR = c(1, 1, 1, 2, 2,
2)), .Names = c("X1", "X2", "indices_forR"), row.names = c(NA,
-6L), class = "data.frame")
> ddply(df,.(indices),function(x) lm(X1~X2,data=x)$coeff[2])
indices X2
1 1 -0.3702172
2 2 0.6324900