質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
COUNT

COUNT は、広く使用されているSQLの関数です。COUNT関数は、行数、もしくは配列のエンティティの数をカウントします。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

1回答

712閲覧

コードミスを知りたい

famikun

総合スコア2

COUNT

COUNT は、広く使用されているSQLの関数です。COUNT関数は、行数、もしくは配列のエンティティの数をカウントします。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2021/12/08 05:49

編集2021/12/09 12:53

f<-function(n){
famif<-runif(30000)
y<-0
count<-0
for(i in 1:30000){
if(famif[i]<(n-y)/n){
if(y==n){
break
}else{
y<-y+1
count<-count+1
}
}else{
count<-count+1
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

for ループの停止条件を if 文の外側に置きましょう。

r

1montekun<-function(n){ 2 famif<-runif(10000) # とりあえず乱数を多めに設定 3 y<-0 4 for(i in 1:10000){ 5 if(y==n) break 6 if(famif[i]<(n-y)/n){ 7 y<-y+1 8 } 9 } 10 return(i-1) 11}

投稿2021/12/08 06:18

編集2021/12/08 06:51
melian

総合スコア19771

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

famikun

2021/12/08 09:15

素早い回答ありがとうございます。melianさんの簡潔なコードに比べて自分のコードはcountが無駄で無駄に長くなってしまっていることがわかりました。 自分のコードがなぜ機能していなかったのか、よろしければ教えてください。breakは直近の繰り返しループを止めると習ったのでy==nになった時点で停止するかなと思ったのですが... if文の入れ子構造内にbreakを設けたことがいけなかったのでしょうか?
melian

2021/12/08 09:32 編集

n と y が等しくなった時、famif[i]<(n-y)/n は常に False になります(famif[i] は常に 0 以上ですので)。そうなりますと、以下の if 文の else 節ばかり実行されてしまいます。結果、ループの最後まで実行されて count が 10000 になってリターンする事になります。 if(famif[i]<(n-y)/n){ : }else{ count<-count+1 } 元のコードで言えば、以下の様になっていれば期待通りの結果が得られたはずです。 if(famif[i]<(n-y)/n){ y<-y+1 if(y==n){ break }else{ count<-count+1 } } else { count<-count+1 }
famikun

2021/12/09 03:40

納得できました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問