2017-07-09 13 views
0

私はRの初心者です。なぜ私のマトリックスで "for"ループが機能しないのか理解できません。私はzigguratを構築する必要があります。そこでは、関数の中に "n"を入力して、画像のような行列を返さなければなりません。 screenshot このコードは、nが5、または5未満の場合に機能します。しかし、5より大きい場合、forループはすべての(1:ハント)番号を実行しません。たとえば、下の図を参照してください screenshot 2 「繰り返し」ループを使用しようとしましたが、うまくいきません。私のコードで間違いはどこですか?Rの「for」ループと「repeat」ループでZiggurat行列が機能しない - なぜですか?

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

ジグラートの論理を説明できますか? –

+0

@ M.Hassan私は "n"レベルを持っています。すべてのレベルには、1からnまでのインデックス番号が含まれていなければなりません。ここで、「n」はzigguratの最上位レベルです。スクリーンショット2では、レベルに「4」がないことがわかります。その代わりに私は2つのレベルで "3"を持っています –

答えて

0

あなたはそのようなものをお探しですか?

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

ええ!できます。どうもありがとうございました! –

関連する問題