`[< -`(`* tmp *`,i,succ,value = 1)出错:下标超出范围

时间:2016-10-18 15:43:57

标签: r function subscript

我必须在黑色背景上模拟带有白色裂缝的图像。所以我定义了一个函数,它添加到一个矩阵,所有元素都等于零,一些连续点等于1。 功能如下:

crepa<-function(matrice) {
 start<-sample(1:ncol(matrice),1)
 matrice[1,start]<-1
 for (i in 2:nrow(matrice)) {
  alpha<-sample(c(-1,0,1),1)
  succ<-start+alpha
  if (succ==(ncol(matrice)+1)) succ==ncol(matrice)
  if (succ==0) succ==1
  matrice[i,succ]<-1
  start<-succ
 }
 matrice<-as.matrix(matrice)
 }

为了控制该功能是否运作良好,我一遍又一遍地将其应用于以下矩阵:

 m<-matrix(0,64,64)
 imma<-crepa(m)

 par(mar=rep(0,4))
 image(t(imma), axes = FALSE, col = grey(seq(0, 1, length = 256)))

在大多数情况下,结果是正确的。但是,在少数情况下我遇到了这个错误:

  

[<-*tmp*,i,succ,value = 1)出错:下标超出范围

1 个答案:

答案 0 :(得分:1)

这两行:

  if (succ==(ncol(matrice)+1)) succ==ncol(matrice)
  if (succ==0) succ==1

应该是:

  if (succ==(ncol(matrice)+1)) succ=ncol(matrice)
  if (succ==0) succ=1

如果您仍然无法看到它,则在使用作业===时,您已使用了等级测试<-

错误消息告诉我它必须是离开矩阵的元素,所以我开始打印出succ的值,然后注意到它没有在正确的范围内重置,只有然后我发现了错误。我可能十次看了代码而没有注意到。我还认为使用小矩阵更容易出现这种错误,因此使用6x6矩阵进行测试,这意味着我可能比使用64x64更有可能看到它!

相关问题