矩阵的细胞交换算法

时间:2014-05-01 12:01:31

标签: r matrix while-loop

感谢this answer中的一些很好的帮助,我写了一些应该

的代码
  1. 在矩阵mat rnum
  2. 中选择一个随机单元格
  3. 将单元格从零更改为1,反之亦然
  4. 在相对的三角形中对应的单元格中进行相反的更改
  5. 检查条件2以查看具有更改的新矩阵是否低于原始矩阵
  6. 如果条件较低则返回新矩阵,如果不返回原始martix
  7. 每次都使用新的rnum重复此操作,直到满足整体条件1
  8. mat的位置:

    mat <- matrix(rep(0, 100), nrow = 10)
    mat[lower.tri(mat, diag = TRUE)] <- 1
    

    while( condition1 > threshold) {
    
    rnum <- sample(1:100, 1)
    if(mat[rnum] > 0){
    mat2 <- mat
    mat2[rnum] <- 0
    mat2[length(mat2) - rnum + 1] <- 1
    return(mat2)
    }else{
    mat2 <- mat
    mat2[rnum] <- 1
    mat2[length(mat2) - rnum + 1] <- 0
    return(mat2)
            }   
    if(condition2(mat2) < 
       condition2(mat) ) {
    mat <- mat2
    }else{
    mat
        }
    }
    

    这里的条件不是关键,为了论证condition1&amp; condition2它可能是顶行的总和,即sum(mat[,1]),但我收到以下错误:

      

    错误:没有返回的功能,跳到顶级

    有人能指出我的缺陷吗?

1 个答案:

答案 0 :(得分:1)

我发现的一个错误是在你的else块上,没有定义mat2。因此,如果随机数在第一次迭代中将我带到else块,则代码错误:

Error in mat2[rnum] <- 1 : object 'mat2' not found

您提到的错误正在发生,因为while循环只是一个语句,代码中没有封闭函数,因此返回(mat2)语句不正确。如果要从函数返回,则只能使用return。在你的情况下,没有功能,因此错误