please also check this post.
目的
指数日次終値データを格納する配列が存在し、その各日付データについて当日を含む過去100営業日分の範囲内で最高値を求めるものとする。通常の言語であればfor文をつかうところだが、Rの場合for文を使用すると処理が大変遅くなるので行列を使用する。処理内容
各日付における過去100営業日以内の最高値の算出
- 配列のサイズが17519のとき、切りが良いように20番目から17519番目の要素だけを抜き出す。
- 行列「1」を作成する。列数100、byrow=t。
- 1行目は21,22,23,,,,,,120。
- 2行目は121,122,123,,,,,,220。
- 最終174行目は17321,17322,17333,,,,,17420。
- 行単位でapply()関数を使用して、max()それをapply(matrix,1,max)を使用し各行の最高値を出す。これで、120日目、220日目、、17420日目時点での最高値が記録される。
- インデックスを一つ進め同様に処理する。つまり、配列「2」を作成する。
- 1行目は22,23,24,,,,,121。
- 2行目は122,123,124,,,,,221。
- 最終174行目は17322,17323,17324,,,,17421。
- 同じくapply(matrix,1,max)を使用し各行の最高値を出す。これで、121日目、221日目、、17421日目時点での最高値が記録される。
- これを最後まで繰り返す。
- 各行ごとの出力結果をすべてappend()すると、120,220,,17420,121,221,,17421,,,,,219,319,,,17519日目の結果が格納された配列「w」ができる。
出力結果の並び替え
配列「w」をmatrix(w,ncol=174,byrow=T)つかって行列に変換する。すると日付で言えば、120日目の結果,220日目の結果,,17420日目の結果
121日目の結果,221日目の結果,,17421日目の結果
,,,,,
219日目の結果,319日目の結果,,,17519日目の結果
となる行数=100x列数=174の配列ができる。
これをさらに、matrix(matrix(w,ncol=174,byrow=T),ncol=1,byrow = T)で列数=1の行列に変換後、as.vector()すると。「120,121,219,220,221,,,319,,,,17420,17421,,,,,17519日目」の結果を日付順に並べた配列が完成する。
0 件のコメント:
コメントを投稿