矩阵上的多个循环

时间:2018-07-22 08:43:11

标签: r loops matrix lapply

我有以下信息:

coordinate <- read.table(text = " 18.915 13.462 31.598
 17.898 14.453 32.160
                          18.220 15.420 32.853
                          19.208 12.313 32.573
                          20.393 11.524 32.110
                          20.344 10.809 31.085
                          21.595 16.610 29.912")
amnumber <- c(1,1,2,3,3,3,4)

atname <-as.data.frame( c("A","B","A","C","D","C","H"),stringsAsFactors = F)


library(geometry)
tri <- delaunayn(coordinate)
tri
     [,1] [,2] [,3] [,4]
[1,]    1    3    7    2
[2,]    4    1    6    2
[3,]    4    1    3    2
[4,]    4    1    3    7
[5,]    5    4    3    7
[6,]    5    1    6    7
[7,]    5    4    1    7
[8,]    5    4    1    6

tridmatrix

我想在tri mamtrix上执行两个循环,以使第一行中的值1与下一个值之间相互关联,例如3,7和2。因此,在循环的输出矩阵中,我们必须在两个之间这些指标。然后,第一行的值3在两个其他值(如7和2)之间具有关系。依此类推。输出结果将是仅包含0.1个值的矩阵。为此,我编写了以下循环:

for (k in 1:nrow(tri)){
  for (i in 1:4){
    for (j in i+1){

      c <- abs(amnumber[tri[k,i]]-amnumber[tri[k,j]])

      if (c>=1){

        if (!((atname[tri[k,i],]%in%"N")&&(atname[tri[k,j],]%in%"C")&&(c%in%1)||
              (atname[tri[k,i],]%in%"C")&&(atname[tri[k,j],]%in%"N")&&(c%in%1))){

          d <- sqrt(sum((coordinate[tri[k,i],]-coordinate[tri[k,j],])^2))

          if (d<=tridist){
            adj_tri[tri[k,i],tri[k,j]] <- 1
            adj_tri[tri[k,j],tri[k,i]] <- 1
            adj_tri[is.na(adj_tri)] <- 0
          }
        }
      }
    }
  }
}

但是没有用。而且我遇到了错误。我的索引等于三矩阵中的列数,我认为问题出在第三循环中。但是,我无法修复它。任何帮助,将不胜感激。

此外,这太慢了。请您帮我改一下它,以加快进度。

0 个答案:

没有答案