2016-05-09 20 views
-5

私は本当にすぐに最終決定を下します。ここに教師が投稿した例がありますが、実際に理解できません。Rプログラミング言語 - ループ

1. fornext

for(i in 1:3) 
    { 
    print("a") 
    next 
    print("b") 
    } 

プリント

[1] "a" 
[1] "a" 
[1] "a" 

2.Nested for

どのように次のステートメントは、ここで働いていますか?私が知っているいくつかの条件が設定されている場合、ループを続ける例は(if i==3) {next}だから、i=3の収益は無視しますが、条件に該当しないときはどのように動作しますか?すべてのウェブを検索しましたが、回答が見つかりませんでした

for(i in 1:3){ 
    for(j in 1:3) 
    for(k in j:i) 
     print("*") 
} 

上記のコードは17個の星を生成します。どうやって ?

3.Another謎

my.vector <- c(1,5,9,13) 
my.data <- c() 
for(i in my.vector){ 
    if(i <= 5){ 
    my.data <- c(my.data, "small") 
    }else{ 
    my.data <- c(my.data, "huge") 
    } 
    my.data <- c(my.data, i) 
} 

上記のコードの出力は、真剣にどのように "9"、 "巨大"、 "13"

ですか?それは "小さい"、 "小さい"、 "巨大な"、 "巨大"であってはなりませんか?

+5

彼らは内のオブジェクトを育てるためにあなたを教え止めるべき教師に知らせますループ。通常、Rの 'for'ループにはより良い選択肢がありますが、それらを使用する場合は、戻りオブジェクトを事前に割り当ててください。 'next'について:いつもコードと呼ばれるので、常に次の繰り返しにジャンプします。それ以降のコードは常に無視されます(したがって、この例は愚かです)。私はなぜ彼らがあなたに「次を」教えるのか分からない。 Rを使って5年以上経った今、私は決して「次を」使っていません。 – Roland

+2

これらのタイプの問題を自分自身で解決する素晴らしい方法は、 'print(i)'のような追加のprint文を挿入してループ内の動きを追跡することです。 – lmo

答えて

1

最初のものについては、そのことを考慮してください。

for(i in 1:3) 
{ 
    print("a") 
    if(TRUE){next} 
    print("b") 
} 

は、本質的に等価です。そのことわざは、「これはとにかく常に真実になるでしょう。それで、 "b"が印刷されない理由を理解するのに役立ちます。

2番目の場合は...それぞれのステップをよく書きます。ちょうど束の印刷物(i)、印刷物(j)そしてそれは意味をなさないでしょう。最後の一つを

for(i in 1:3) { 
    for (j in 1:3) { 
    for (k in j:i) { 
     #print("*") 
     print(i) 
     print(j) 
     print(k)   
     print(" ") 
    } 
    } 
} 

...よく私はので、私はそれが私の出力が一致しない理由はわからない"small" "small" "huge" "huge"を取得します。

そして、疫病のようなRのループは避けてください... applyファミリーのものを試してください。

3
  1. 制御フローのR helpから:nextは、現在の反復の処理を停止し、ループインデックスを進めます。したがって、 "a"を印刷した後、インデックスを1だけ追加してforループの先頭から再開します。
  2. i = j(3回)の場合、3つの星が生成されます。 | i-j | = 1(4回)、4 * 2星が生成されます。 | i-j | = 2(2回)、2 * 3個の星が生成されます。合計で、3 + 8 + 6 = 17個の星です。
  3. 私の出力は、次のとおりです。 「小さい」「1」「小さい」「5」「巨大な」「9」「巨大な」「13」
関連する問題