加快for循环

时间:2018-08-06 11:28:53

标签: r loops

这是我的数据。

set.seed(100)
toydata <- data.frame(A = sample(0:50,50,replace = T),
                  B = sample(0:50,50,replace = T),
                  C = sample(0:50,50,replace = T),
                  D = sample(0:50,50,replace = T),
                  E = sample(0:50,50,replace = T)

)
toydata<-as.matrix(toydata)
toydata[1,]<-0
toydata[44,]<-0

toydata[1,4]<-3
toydata[44,1]<-4

m<-toydata

这是我的交换功能:

derangement <- function(x){
  if(max(table(x)) > length(x)/2) return(NA)
  while(TRUE){
    y <- sample(x)
    if(all(y != x)) return(y)
  }
}

swapFun <- function(x, n = 10){
  inx <- which(x < n)
  y <- derangement(x[inx])
  if(length(y) == 1) return(NA) 
  x[inx] <- y
  x
}

交换之后,我希望两个矩阵之间的行中位数之和小于12。

我使用for循环来找到可行的解决方案:

for (i in 1:1000000000) {
  mnew<-swapFun(m)
  if((sum(abs(rowMedians(mnew)-rowMedians(m))))<12) 
    {break}

}

我的计算机有5个核心。如何通过使用更多内核来加快for循环。

非常感谢。

0 个答案:

没有答案