Rの質問です。
x<-rnorm(n=100,mean=0,sd=1)
のとき
while文を使ってベクトルxの要素を一つ目から順番に足して、
5より大きい、または-5より小さい数になったときにループを抜けるプログラムを書きなさいという宿題がでました。
このxベクトルでwhileの条件を満たす確率はほとんど無いことは分かっていますが、とりあえずそこは置いといて。
それ以前にwhile文内のxベクトルの足し算がうまく行きません。
どうすればよいか教えていただきたいです。
(R触りたての初心者なので優しく教えていただければ幸いです。)
No.1ベストアンサー
- 回答日時:
ます最初に言っておきます。
この宿題は「クソ」です。
少なくともこれ出題した先生を、もしスリッパ等を持参してるのなら、後頭部を不意打ちで叩く事を推奨します。
それくらいこの宿題は「クソ」ですね。
バッカじゃねーの、とか思いました。
まず前提として。
> xベクトルの足し算がうまく行きません。
根本的な問題として、ですね。
要素数がいくつのベクトルだろうと、要素の総和を取るのならsum関数を使えば良い話です。
> x <- rnorm(n=100, mean=0, sd=1)
> x
[1] 1.9856273882 -0.0393149350 1.0288693156 -0.3845112155 0.1567238100
[6] -0.7405260690 -1.3162452863 -1.9911837957 -0.3485634358 -0.0952636521
[11] 0.3321155828 1.0184437655 -0.5643891205 -0.9417264326 -0.3249899218
[16] -0.6664708526 -0.0690004397 -0.4059241836 -0.6461685678 0.3228851791
[21] 0.2975200321 -2.3220631940 0.2671440095 0.3863390253 -1.4282327200
[26] -0.6312963684 0.7327186886 -0.8350090262 -0.7726247015 -0.8878093032
[31] 0.4021283784 -1.6656350019 -0.4054765185 -0.8090603816 -0.2110006736
[36] -1.7352539949 1.6151750206 -0.8149158951 -0.0551857630 -0.6421213241
[41] -0.3388782470 0.0859075148 0.8474065923 -0.4084085973 0.6976830908
[46] 1.0474757803 2.1835703785 0.2234343153 -0.8321282959 1.1705157640
[51] 0.1406923858 0.5310833119 1.0286097907 -0.1113910680 -0.1782634035
[56] 0.2225236050 0.0880495148 -0.4833964174 -1.1139820839 0.6640903573
[61] 0.0004318528 -1.3910832642 0.3484243110 0.8836353448 -0.2069730566
[66] 0.9569187301 1.1368141213 -0.7794222966 -0.2522085370 -0.6094299759
[71] 1.4743915653 0.8597524122 -1.2086606269 0.7219514322 -0.0398310649
[76] -0.2778947725 1.2225708568 0.8540783930 -0.5201966225 0.6489344385
[81] -0.2339551798 -0.0436739979 0.6775265362 0.6719925284 -0.0120023720
[86] -0.5190897669 -0.6538468940 0.1239070298 1.5589439248 -0.7589570323
[91] -1.2458169161 0.5477068527 1.4340535191 -0.2366571431 0.1102293974
[96] -1.0281245484 -2.0588061250 0.7987346347 -2.0989746075 0.8238644449
> sum(x)
[1] -6.060421
これで終わり、です。
とすると、そもそもwhile文を使う必要がない。
そして、
> このxベクトルでwhileの条件を満たす確率はほとんど無いことは分かっています
なら、わざわざ条件を「満たさない」可能性でプログラムにバグを引き込む必要もないんですよ。
あまりに悪しき「発想」なんで、その先生、アタマがいかれてるんじゃないか、って思います。
言わば「C言語脳」ですね。
教えて!gooにも「しょーもない」C言語の問題が投稿されてる事が多いんですが、全く意図が分からない、生徒に無駄な苦労させる「為だけに」出題されてる宿題が多くて辟易とします。
大局的に、あるいは俯瞰的に「プログラミングの発想」を教えるより、C言語の構文の特殊性にだけ着目したくだらない問題。
この問題もそういう薫りがプンプンとしてます。
Rは構文的にC言語に似せていますが、実態は全く異なるモノです。むしろいかにベクトルを簡易に扱わせるか、が主題の言語なんです(これは配列を扱うのに苦労するC言語なんかとは全く違うわけで、じゃないと「統計用プログラミング言語」として意味が無くなるでしょう)。
結論として、whileやforなんかの「繰り返し構文」なんざ使わなければ使わない方が良いんです(その代わりに別の関数を用いるように設計されている)。
さて、じゃあその「C言語脳」が欲してる回答ってのはどういう感じなんでしょうか?
大体、こういう場合の「C言語脳」が欲しがる「みっともない」(C言語以外の現代的なプログラミング言語ユーザーなら全員「みっともなく」思う)解は次のようなモノになるでしょう。
i <- 0 # xのi番目を指定する
acc <- 0 # アキュムレータ(累積器)
while ((acc > 5) || (acc < -5)) {
acc <- acc + x[i] # アキュムレータには常にxのi番目の要素を足していく
i <- i+1 # iの値を1増やす
}
ちなみに、これ動かしても「条件が満たされれば終了する」だけで別に何も表示しません。
だって仕様(宿題)には何も書いてないから「何も出力しない」で充分です。
「C言語脳」の人たちなら上のプログラム見て「C言語的だ、美しい!」とか言うかもしれんですが、他の「現代的プログラミング言語ユーザー」なら「しょーもな」とか言うでしょうねぇ(笑)。
「特定のプログラミング言語の設計意図を無視した意図が分からん問題」からは「醜さ」しか生まれないモノですよ。
詳しい解説ありがとうございます!
sumを使った場合、最初から総数が出てしまうということは途中で条件を満たした場合は確認できるのでしょうか?
※蛇足(おそらく先生的にはwhile文の使い方が分かっているか知りたかっただけで問題をあまり深くは考えてないと思います…(汗)。)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java Java 南京錠 2 2023/02/04 11:46
- その他(プログラミング・Web制作) uwscとWinShotを使いスクリーンショットを撮る 1 2022/06/30 21:15
- 物理学 物理の証明問題についての質問です。 平面内を運動する小球がある。この物体にかかる加速度の方向と大きさ 2 2023/05/16 00:28
- Ruby VBA 2 2023/01/14 14:14
- 英語 英語のthough(接続詞)について質問です 対比や譲歩を表す、文中にある従属接続詞は 前の文の最後 3 2022/12/06 17:59
- 英語 (前文)-turning up the volume on the bicycle trend wh 1 2023/02/08 15:57
- その他(プログラミング・Web制作) パイソンのプログラミングについての質問です 2 2023/05/22 12:39
- 数学 内積の問題で質問です。 Qこの問題は図にベクトルの向きが書かれてないのですが、どうやって足し算・引き 6 2022/05/24 18:36
- 英語 Osteogenesis in group B and C were significantly l 2 2022/03/24 05:27
- 英語 While there will always be a certain amount of cri 2 2023/04/02 16:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フローチャートの菱形が狭い。。。
-
65536は2の何乗なのでしょうか?
-
PICマイコンのコピー(クローン...
-
変化させるセルが変化しない
-
Excelで4096点以上のFFTの方法
-
Bluestacks内でダウンロードし...
-
人時生産性をExcelで計算したい
-
パソコン
-
自動クエリとはどういうもので...
-
万年暦を導き出すプログラミング
-
未使用の変数を一括検索する方法
-
「ルーチン」という言葉の意味
-
乗換案内の作り方が知りたいです。
-
スクリーンセーバーの作り方
-
VBからシャットダウンさせる方法
-
バッチファイルでウインドウを...
-
理系学生は皆プログラミングで...
-
寿命
-
バッチファイルでUSB挿入時に実行
-
アルゴリズムとプロトコールの違い
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フローチャートの菱形が狭い。。。
-
フローチャートで 変数に代入す...
-
fortran errorについて
-
フローチャートで。
-
フローチャート(本当に困って...
-
フローチャート
-
フローチャート
-
フローチャートの書き方
-
fortran go to 文
-
フローチャート
-
for文のフローチャート
-
Rの質問です。 x<-rnorm(n=100,...
-
カシオ fx-4800pにて
-
連立1次方程式を計算するFortra...
-
配列 x に入っているデータの最...
-
フローチャートの演算記号
-
C言語のプログラミングに関する...
-
fortran
-
fortaran初心者です...(複数条...
-
フロートチャートをVBAで表すには
おすすめ情報