Сначала удалите все инструкции, которые можно выполнить один раз, и поместите их вне цикла for.Например: colnames
и as.numeric
.
Во-вторых, попробуйте векторизовать.Кажется, что вычисление w1
может быть векторизовано и, таким образом, вычислено один раз за пределами цикла for, просто удалив [i]
.
В-третьих, инициализируйте final.data1
до конечного измерения.Для каждой строки, добавленной к этому data.frame, R создаст новый data.frame с еще одной строкой, а затем удалит предыдущий data.frame.Это займет много времени.Таким образом, final.data1 <- matrix(NA, ncol=length(y1), nrow=NROW)
.
И, наконец, если вы хотите использовать более одного ядра, попробуйте заменить цикл for на распараллеленный foreach loop
.Это возможно, если все строки независимы:
require(foreach)
require(doSNOW)
cl <- makeCluster(25, type="FORK") # FORK not usable in Windows
registerDoSNOW(cl) # register the cluster
clusterExport(cl, c("objects", "needed", "by", "each", "iteration"), envir=environment()) # for example y1, w1 and camera1
final.data1<- foreach(i=icount(NROW), .combine=rbind, inorder=FALSE) %dopar%
{
# your R code
}
stopCluster(cl)