Ziggurat矩阵不适用于R中的“for”和“repeat”循环 - 为什么?

问题描述 投票:2回答:2

我是R的初学者。我无法理解为什么“for”循环在我的矩阵中不起作用。我需要构建ziggurat,其中我在函数中输入“n”,它必须返回像图片中的矩阵。 screenshot此代码适用于n等于5或小于5.但是当它大于5时,“for”循环不会运行所有(1:hunt)数字。例如,看下面的图片screenshot 2我试图使用“重复”循环,但它也不起作用。我的代码中的错误在哪里?

build_ziggurat <- function(n){
h<-1  
hunt <- n-4
if(n==1){
 m<- matrix(1, nrow = 1, ncol = 1)
  } else {
  if(n<5){
  d <- matrix(h, ncol = 2*n-h, nrow=2*n-h)
  d[2:(n+n-2),2:(n+n-2)]<-h+1;d
  d[(n-h):(n+h), (n-h):(n+h)]<-n-h;d
  d[n,n]<-n;d
  print(d)
} else {

  for(i in hunt:1){
    h<-1
      t <- matrix(h, ncol = 2*n-h, nrow=2*n-h)
      t[2:(n+n-2),2:(n+n-2)]<-h+1
      t[(n-h-i):(n+h+i), (n-h-i):(n+h+i)]<-(n-h-i)
      t[(n-h):(n+h),(n-h):(n+h)]<-n-h
      t[n,n]<-n
      return(t)

  }      

}
}
if(n==1) m
}      
r loops for-loop matrix repeat
2个回答
1
投票

你在寻找类似的东西吗?

zigguratCreator <- function(n){
  out <- mat.or.vec(nr = (n - 1)*2 + 1, nc = (n - 1)*2 + 1) + 1
  for(i in seq(n - 1)){
    out[seq(i + 1, nrow(out) - i), seq(i + 1, ncol(out) - i)] <- i + 1
  }

  return(out)
}

zigguratCreator(n = 6)

0
投票
zigguratCreator <- function(n){
  size <- 2*n-1
  out <- matrix(nr=size, nc=size)
  for(i in 1:size){
    for (j in 1:size){
      out[i,j] <-min(n-abs(i-n),n-abs(j-n))
    }
  }
  return(out)
}
© www.soinside.com 2019 - 2024. All rights reserved.