【问题标题】:cell swapping algorithm for matrix矩阵的单元交换算法
【发布时间】:2014-06-17 21:42:37
【问题描述】:

感谢this answer 的一些大力帮助,我写了一些应该的代码

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

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
    }
}

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

错误:没有函数可以返回,跳转到顶层

谁能指出我的缺陷?

【问题讨论】:

    标签: r matrix while-loop


    【解决方案1】:

    我发现的错误之一是在您的 else 块中,未定义 mat2。因此,如果随机数在第一次迭代中将我带到 else 块,代码错误:

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

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

    【讨论】:

    • 谢谢,尽管即使我在 else 子句中定义 mat2 我也会得到同样的错误! :(
    猜你喜欢
    • 1970-01-01
    • 2015-03-13
    • 2017-08-26
    • 2013-08-02
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 2021-04-29
    • 2019-03-24
    相关资源
    最近更新 更多