2017-09-17 1 views
-1

を繰り返します。ここに質問があり、私は今何をしているのですか。R - のために使用して印刷値、しばらく、私は私のコードで再びトラブルを抱えていたループ

# 2. Draw a random sample of size n=20 from a uniform distribution in 0 and 1 using 
# runif(20). Sequentially, print values using the following rules: 
#  i. Print a value if it is less than 0.3 or more than 0.8, but skip it 
#   (don’t print the value) if it is in (0.1, 0.2], 
#  ii. Skip the entire process if you find a value in [0.4,0.5]. 
# Write three separate R codes using (a) for loop, (b) while loop 
# and (c) repeat loop. 

# (a) for loop 
n = runif(20) 
for (val in n){ 
    if (val > 0.1 & val <= 0.2){ 
    next 
    } else if (val < 0.3 | val > 0.8){ 
    print(val) 
    } else if (val >= 0.4 & val <= 0.5){ 
    print(val) 
    break 
    } 
} 

# (b) while loop 
n = 1 
m = runif(20) 
while(n < 20){ 
    if (m > 0.1 & m <= 0.2){ 
    next 
    } else if (m < 0.3 | m > 0.8){ 
    print(m) 
    } else if (m >= 0.4 & m <= 0.5){ 
    print(m) 
    break 
    } 
    n = n + 1 
} 

# (c) repeat loop 
n = 1 
m = runif(20) 
repeat{ 
    if (m > 0.1 & m <= 0.2){ 
    next 
    } else if (m < 0.3 | m > 0.8){ 
    print(val) 
    } else if (m >= 0.4 & m <= 0.5){ 
    print(m) 
    break 
    } 
} 

パート(a)forループは完全に動作しています。

私の唯一の問題は、(b)はwhileループ、および(c)リピートループです。彼はクラスやノートで良い仕事をしなかったwhileループと繰り返しループを行っています。助けてください。

+0

あなたは、あなた自身の言葉で、あなたが何をしようとして、間違った何が起こっているのか、何をやっている記述することはできますか? –

+0

(1)あなたは 'm'に索引をつけていません。 (2) 'repeat'ループでは、インデックス' n'をインクリメントすることさえありません。 (3) 'next'を実行すると、次の命令がループの先頭になるので、' n < - n + 1'は*実行されません。 –

+0

@RuiBarradasどのようにwhileループとrepeatループを修正できますか? – Renee

答えて

1

あなたが作成したオブジェクトmは長さが20です。したがって、if (m > 0.1 & m <= 0.2)のようなものでテストすると、Rはオブジェクトの最初のアイテムのみをテストします。これを解決するには、n、あなたのループカウンタでインデックスmする必要があります。つまり、テストでmを使用しないでください。代わりにm[n]を使用してください。これはすべて次のようになります。

n <- 1 
m <- runif(20) 
while(n < 20){ 
    if (m[n] > 0.1 & m[n] <= 0.2){ 
    next 
    } else if (m[n] < 0.3 | m[n] > 0.8){ 
    print(m[n]) 
    } else if (m[n] >= 0.4 & m[n] <= 0.5){ 
    print(m[n]) 
    break 
    } 
    n <- n + 1 
} 

パートcについても同様のアプローチを使用できます。 (また、一部には、あなたが一点にprint(val)を持っcのことに注意してください。)

役に立てば幸い!どうやら

1

運動あなたはそれを整理するための場合は、しかし、[OK]を、私は解決策を投稿します。最終的なメモ、擬似乱数生成器が使用されるたびに、結果が再現可能にするために、初期値を設定しなければならないとして

# (b) while loop 
n = 1 
m = runif(20) 
while(n <= 20){ 
    if (m[n] > 0.1 & m[n] <= 0.2){ 
    n = n + 1 
    next 
    } else if (m[n] < 0.3 | m[n] > 0.8){ 
    print(m[n]) 
    } else if (m[n] >= 0.4 & m[n] <= 0.5){ 
    print(m[n]) 
    break 
    } 
    n = n + 1 
} 

# (c) repeat loop 
n = 0 
m = runif(20) 
repeat{ 
    if(n < 20) 
    n <- n + 1 
    else 
    break 
    if (m[n] > 0.1 & m[n] <= 0.2){ 
    next 
    } else if (m[n] < 0.3 | m[n] > 0.8){ 
    print(m[n]) 
    } else if (m[n] >= 0.4 & m[n] <= 0.5){ 
    print(m[n]) 
    break 
    } 
} 

。これは次のように行われます。

set.seed(6019) # or any other value, 6019 is the seed 

これはrunifから前に最初の呼び出しを入れています。

+0

ありがとう、私は自分でリピートループをやっていましたが、どのようにしてn = 0に設定するのですか? – Renee

+0

@Reneeこの場合、ループの先頭で右に 'n 'をインクリメントするためです。これは、 'while'とは異なり、' repeat'が条件で終了しないため、最初に条件をチェックする必要があるためです。 –

関連する問題