【问题标题】:Ziggurat matrix doesn't work with "for" and "repeat" loops in R - Why?Ziggurat 矩阵不适用于 R 中的“for”和“repeat”循环 - 为什么?
【发布时间】:2017-12-13 05:53:15
【问题描述】:

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

【问题讨论】:

  • 你希望找到什么?你能解释一下你的 ziggurat 逻辑吗?
  • @M.Hassan 在 ziggurat 我有“n”个级别。每个级别必须包含从 1 到“n”的索引号,其中“n”是 ziggurat 的顶层。在屏幕截图 2 中,您可以看到关卡中没有“4”。而不是它,我有两个级别的“3”

标签: r loops for-loop matrix repeat


【解决方案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)

【讨论】:

    【解决方案2】:
    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)
    }
    

    【讨论】:

    • 欢迎来到 Stackoverflow。在回答问题时,最好解释一下您提出的解决方案如何以及为何解决手头的问题。更多信息:stackoverflow.com/help/how-to-answer
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    相关资源
    最近更新 更多