『【RStudio】RStudioを使う』シリーズでは、RStudioを使ってデータの統計処理、グラフの描画をしていきます。
第四弾の今回は、「Rでfor文を書く」をしていきます。
プログラミング言語でfor文と言えば、同じ作業を繰り返し行える処理のことです。
ImageJマクロでもfor文を書いていますが、言語によって書き方が少しずつ違うので注意が必要です。
Rでfor文で処理するのは処理速度が遅くて良くないと言うご意見もあるかもしれませんが、生命科学系でちょちょっと解析するのには十分すぎるスピードなので特に問題はありません。
RStudioを使う#2で書いたフローチャートで言うとこの部分です。
RStudioのインストール方法はこちらをご覧ください。
Rのfor文の基本の形
Rのfor文の基本的な形は...
実際に試しに書いてみましょう。
print関数を駆使して、実行されている作業をコンソール画面に表示してみました。
やっていることは、xという変数に、1×2、2×2、3×2、....10×2の計算結果を入れていくと言う作業。
実行すると、計算結果がコンソール画面に表示されて、ちゃんと計算されています。
print関数はfor文の中に入れてあるのですが、最終的に変数xにはどんな値が入っていると思いますか?
見てみましょう。
for文を抜けたxには最後に計算した10×2の計算結果、20しか入っていないことがわかります。
これからやりたいのは、計数したデータを取ってきてずらっと並べる(一つの変数に入れる)ことです。
そのためには、for文を書く前に少し準備が必要。
for文の前に、空っぽの箱を並べた変数を準備します。
(R言語で箱の並びといえばベクトルで、ベクトルはc()で定義できます。)
for文の前に、aと言う変数に"c()"で定義した空っぽのベクトルを用意しておきます。(一行目)
用意したベクトルの一つ一つの箱にxを入れていく作業を繰り返し行なっていきます。(四行目)
for文を抜けた後に変数aに何が入っているか表示させると、計算結果が全部入っていました。
この書き方を覚えておくと、いろんなところで役立つので便利です。
csvファイルを読み込む繰り返し処理
基本的なfor文がかけたところで、本題のcsvファイルを読み込んでデータを取ってくるをしてみましょう。
ファイルリストの長さを取得する
まずは『RStudioを使う』シリーズの第三弾で取得できるようになったフォルダ内のファイルリストを使って、フォルダの中に何個解析するべきファイルがあるのか?(=何回繰り返し処理をすれば良いのか)を調べてみましょう。
箱の数を数える関数は"length"。
length関数の括弧の中に長さを調べたいものを入れると長さが表示されます。(今回選んだディレクトリには30個csvファイルがあることがわかりました。)
繰り返し処理の中身を書いていく
まずは、変数filelistの一番目を例に繰り返し処理の中身を書いていきましょう。
やることは、
・ファイルリストの一番目を"read.csv"で読み込む
・csvファイルのカウントのデータを取ってくる
コンソール画面に読み込んだ結果が表示されました。
ピンクの四角で囲った部分がcsvファイルの中身で、下の「57」が計数結果です。
ちゃんと形を保ったまま読み込まれていることがわかります。
やっていることはこちらの記事でやっていることと一緒です。
では、リストの二番目でもやってみましょう。
filelist変数の後の"[]"の中身を2に変えて実行するとちゃんと読み込まれるデータが変わっているのがわかります。
"d[1,2]"はどのcsvファイルでも共通なのでそのままにしておきましょう。
計数結果をベクトルに入れていく
では、この処理過程をfor文に入れていきます。
最初に、countと言う名前に空のベクトルを準備します。
繰り返し処理の回数は、filelistの長さなので"length(filelist)"としています。
read.csvの中身は先ほど変えたfilelistの括弧の中身([])に"i"を入れて実行してみましょう。
変数countの中身には、計数結果の数値だけがずらっと並びました。
これでは、どのサンプルがどの数字と対応しているのかよくわかりませんよね。
次回は、グラフを描くためのデータを作る準備のために"tidyverse"パッケージをインストールしていきます。