levelName
1 .
2 ¦--Day01
3 ¦ ¦--Day01.Rproj
4 ¦ ¦--Script01.R
5 ¦ ¦--Script02.R
6 ¦ ¦--Data
7 ¦ ¦ ¦--raw_data.csv
8 ¦ ¦ °--cleaned_data.csv
9 ¦ °--Figs
10 ¦ ¦--Figure01.png
11 ¦ °--Figure02.png
12 °--Day02
13 ¦--Day02.Rproj
14 ¦--Script01.R
15 ¦--Document01.qmd
16 ¦--Document01.html
17 ¦--Data
18 ¦ °--my_data.csv
19 °--Figs
20 ¦--Old
21 ¦ ¦--Figure01.pdf
22 ¦ ¦--Figure02.pdf
23 ¦ °--Figure03.pdf
24 °--New
25 °--Figure01.png
ファイル・システム
1 拡張子
PC内に存在するほとんどのファイルは「名前.拡張子
」と名付けられている1。名前の拡張子は.
で区切られており、名前は英数字と_
のみで構成することを推奨する(ファイル名に.
が推奨されない理由の一つが名前と拡張子を区分する文字として使われるからだ)。ここで注目したいのはファイルの名前でなく、拡張子のことだ。拡張子とはファイルの特徴を示すものである。たとえば、拡張子が.html
であれば、ウェブページ形式を意味し、.png
なら図、.pdf
なら図・文書、.exe
なら実行ファイル、.dmg
ならディスクイメージを意味する。ファイル名がFigure01.png
ならFigure01
という名の画像ファイルであることを意味する2。この拡張子によって、パソコンは当該ファイルをどのアプリケーションで開くかを判定する。.exe
ファイルをダブルクリックするとアプリケーションが立ち上がるし、.pdf
ファイルをダブルクリックするとPDFビュアーソフトが起動され、中身が表示される。
これは拡張子を変えると問題が生じ得ることを意味する。画像ファイルであるFigure01.png
のファイル名を動画ファイル拡張子であるMovie01.mp4
に修正しても、そのファイルは動画ファイルにはならない。また、拡張子が.mp4
になると、そのファイルを開く際、動画プレイヤーが起動されるが、ファイルの中身は画像ファイルのままなのでエラーが出る。したがって、拡張子は勝手に変えてはならない。たまに課題の結果物としてファイルを提出する際、自分の名前を入れたくてファイル名をXXXX.html
からXXXX.html_Song
へ変更して提出する場合がある。しかし、これは大きな間違いだ。もやはこのファイルはHTMLファイル(.html
)でなく、未知のファイル形式(.html_Song
)として認識され、ダブルクリックしてもPCはどのアプリケーションで開けば良いかが分からなくなる。ファイル名を修正するならXXXX_Song.html
のように修正しよう3。
Rを用いたデータ分析の場面において頻繁に登場する拡張子は以下の通りである。ファイルの名前は大文字と小文字を区別するが、拡張子の場合、区別されないケースが多い。
拡張子 | 説明 | 備考 |
---|---|---|
.R |
Rスクリプトファイル | |
.Rproj |
Rプロジェクトファイル | |
.Rmd |
R Markdownファイル | |
.qmd |
Quartoファイル | RMarkdownに似たようなもの |
.csv |
表形式ファイル | 業界標準のフォーマット |
.xlsx or .xls |
表形式ファイル | Excelで使うフォーマット |
.dta |
表形式ファイル | Stataで使うフォーマット |
.sav |
表形式ファイル | SPSSで使うフォーマット |
.html |
ウェブページファイル | R Markdown/QuartoをKnitした場合に得られる |
.png |
画像ファイル | |
.pdf |
画像/文書ファイル | 画像にも文書にもなるファイル |
2 ファイルシステム
R上でファイルを入出力を行うためにはファイルシステム(file system)を理解する必要がある。
2.1 ファイルの入出力
そもそも、ファイルの「入出力」とは何だろうか。これはコンピューターの構造に関わる話なので極めて難しい内容であるが、我々のような消費者(end user)側から見れば、ファイルの入力(input)とは、いわゆるファイルの読み込みを意味し、多くの場合、表形式のデータ(.csv
、.xlsx
など)をR上に読み込む作業を意味する。また、ファイルの出力(output)とは、いわゆるファイルの保存だ。たとえば、作成したスクリプトを.R
形式で保存したり、加工済みのデータを.csv
形式で保存したり、作成した図を.png
、.pdf
形式で保存したり、作成した文書を.pdf
、.html
形式で保存したりすることがファイルの出力だ。
2.2 パスとは
ファイルを読み込む場合はファイル名を指定する必要がある。また、ファイルを書き出す場合もファイルに名付ける必要がある。そしてファイル名は名前.拡張子
である。ただし、これらのファイルは全て一箇所に集まっているわけではない。もし、全てのファイルが一箇所に集まっていると、必要なファイルを探すのは非常に難しい。通常、PC内には数万のファイルがある。これらのファイルから必要なファイルを探すのは至難の業だろう。したがって、これらのファイルをいくつかの部屋に分けて保管し、この部屋のことをフォルダー(folder)、またはディレクトリ(directory)と呼ぶ(ここでは「フォルダー」と呼ぶとする)。パス(path)とは特定のファイルの位置と名前の書き方である。つまり、「どこのどのファイルを読み込むか」、「このファイルをどの名前でどこに保存するか」に関する書き方であり、プログラミングを学習する上で必須の知識と言っても過言ではない。
このパスという概念は我々が住んでいる居住地の「住所」と類似した概念だ。もし、日本に「都道府県」も「市区町村」も「〜丁目、〜番、〜号」という概念がないとしよう。ここでAmazonで魚を購入し、受取先を指定する場合はどうすれば良いだろうか。日本に人が数十人しか住んでいないのであれば、「XXXさんの家」と書くだけで十分かも知れない。しかし、日本には1億人以上の人がある。「ソンさんの家」と書いても届かないだろう。届いたとしても数年、あるいは数十年後に魚の化石の状態で届くかも知れない。そもそも日本に「ソンさん」はこの授業の担当教員以外にもいくらでもいる(ちなみに송(Song; 宋・松)さんも、손(Sohn; 孫)さんも、성(Seong/Sung; 成・星)さんも、선(Sun/Seon; 宣)さんも韓国語では発音が全く別だが、日本ではソンさんになってしまう。)。それぞれの家を何かの区域内に位置づけないとモノが届くまで数年かかってしまう。そこで必要なのが住所だ。「東京都千代田区永田町1丁目7番1号の田中さん」は「東京都」、「千代田区」、「永田町」、「1丁目」、「7番」、「1号」、「田中さん」で構成される。これをファイルシステムに例えると、東京都というフォルダーの中に千代田区というフォルダーがあり、その中には永田町というフォルダー、その中に1丁目といるファルダー、…が存在する。むろん、一つのフォルダーには複数のフォルダーが存在する可能性もある。東京都のフォルダーには千代田区以外にも大田区、中野区、文京区、葛飾区といった複数のフォルダーがあり、千代田区の中にも複数のフォルダーがある。最後の「田中さん」は受け取る人、コンピューターでいうファイル名である。
この住所と受取人のことをコンピューターではパス(path)と呼ぶ。それぞれのフォルダーは/
で区切られる(macOS/Linuxでは/
、Windowsでは\
または¥
; JDCat分析ツールはLinuxベースであるため、/
で区切られる)。先ほどの住所の例だと、東京都/千代田区/永田町/1丁目/7番/1号/田中さん
となる(macOS/Linuxの場合)。左に行くほど上位のフォルダーとなり、最後のものはファイル名である。ただし、コンピュターではパスの最初に/
を付ける。Windowsなら主にC:\
でスタートし、C:\東京都\千代田区\永田町\1丁目\7番\1号\田中さん
となる(\
の代わりに¥
と表示される場合もある)。
たとえば、以下のような構造でファイルが保存されているとしよう。拡張子が付いているものはファイル、それ以外はフォルダー、1行目の.
は最上位フォルダーである。
ここでread_csv()
関数を使ってDay01
フォルダー内のData
フォルダー内のraw_data.csv
を読み込む場合はread_csv("/Day01/Data/raw_data.csv")
となる。また、ggsave()
を用いて、Day02
内のFigs
内のNew
内にFigure02.png
という名で図を保存する場合は、ggsave(filename = "/Day02/Figs/New/Figure02.png", ...)
と入力する必要がある。しかし、通常、パスを指定する際に、/
(WindownならC:\
)から始めることは滅多にない。それは「作業フォルダーはパスで省略可能」だからだ。
3 RStudioのプロジェクト機能
Rでファイルを入出力する時に頭に入れておくべき概念として「作業フォルダー(working folder/working directory)」がある。通常、Rの作業フォルダーはmacOSだと/Users/ユーザー名/
、JDCat分析ツールだと/home/joyvan/
が作業フォルダーだ。そして、パスを指定する場合、作業フォルダーは省略することができる。つまり、現在の作業フォルダーが/home/joyvan/
なら"/home/joyvan/Day01/Data/raw_data.csv"
は"Day01/Data/raw_data.csv"
に、"/home/joyvan/Day02/Figs/New/Figure02.png"
は"Day02/Figs/New/Figure02.png"
に省略される。我々が郵便局で手紙を送る際、住所にわざわざ「日本国」と書かないものと同じである。作業フォルダーはRコンソール上でgetwd()
と入力すれば出力される。macOSなら/Users/ユーザー名
、JDCat分析ツールなら/home/joyvan
と出力される。
macOSとLinuxに限定した話であるが、最上位フォルダーは/
であり、これはシステム上の最上位フォルダーである。個人レベルの最上位フォルダーはmacOSだと/Users/ユーザー名
、JDCat分析ツールだと/home/joyvan
である。そして、この個人レベルの最上位フォルダーは~/
と表記することができる。Rコンソールでgetwd()
を入力し、以上のように出力されれば個人レベルの最上位フォルダー(~/
)が作業フォルダーになっている理解しても良い。ちなみに、WindowsはC:\
がシステム上の最上位フォルダーである。
もし、自分がこれから全ての作業をDay03
という名のフォルダー内で完結するとする。つまり、保存するスクリプト(たとえば、Script.R
)もDay03
に保存し、図(たとえば、FigureA.png
)はDay03
のFigs
フォルダーに、読み込む表形式データ(たとえば、Day03_Data.csv
)もDay03
の中のData
フォルダーに入れるとする。この場合、それぞれのファイルのパスはDay03/Script.R
、Day03/Figs/FigureA.png
、Day03/Data/Day03_Data.csv
となる(作業フォルダーが~/
であるため、~/
は省略可能)。全ての作業が同じフォルダー(とその下位フォルダー)内で行うとしたら、パス名にDay03
も不要な気がする。そこで必要なのがRStudioのプロジェクト機能である。
RStudioでDay03
というプロジェクトを作成すると、Day03
フォルダーが自動的に生成され、Day03.Rproj
というファイルも生成される。プロジェクトを最上位フォルダーに作成したのであれば、~/Day03/Day03.Rproj
ファイルが生成されるのである。ここでRStudioのFile > Open ProjectでこのDay03.Rproj
ファイルを開くとRStudio画面の右上にプロジェクト名が表示され、作業フォルダーがDay03.Rproj
が保存されているフォルダー、つまり~/Day03
へ変更される(プロジェクトが開かれていな場合は「Project: (None)」と表示される)。実際、JDCat分析ツールでXXX
という名前のプロジェクトを生成し、そのプロジェクトを開けば作業フォルダーは/home/joyvan/XXX/
(=~/XXX/
)になる(getwd()
で確認可能)。これは大変便利な機能である。なぜなら作業フォルダーまでのパスは全て省略可能だからだ。これまでDay03/Script.R
、Day03/Figs/FigureA.png
、Day03/Data/Day03_Data.csv
だったパスが、それぞれScript.R
、Figs/FigureA.png
、Data/Day03_Data.csv
になる。
また、何らかの理由でDay03
フォルダーの名前をDay05
に変更したとしよう。もし、プロジェクト機能を使っていないのであれば、パスのDay03
を全てDay05
に変更する必要がある。しかし、プロジェクト機能を使っているのであれば、.Rproj
ファイルが存在するフォルダーが作業フォルダーになるため、そもそもパスにDay03
は存在しない。つまり、修正不要ということだ。ちなみに、プロジェクトを一旦作成したら、そのプロジェクトのフォルダー名や.Rproj
ファイルの名前は自由に修正しても良いし、フォルダー名と.Rproj
ファイルの名前が一致しなくても良い。
以上の内容を住所と郵便の話で例えるとしよう。社内でも郵便物の行き来は頻繁に行われる。とりわけ面積が広く、キャンパスも複数ある大学なら尚更だ。たとえば、「大阪府吹田市山手町3-3-35 関西大学 ラーメン学部」の宋が「大阪府吹田市山手町3-3-35 関西大学 ラーメン研究支援課」の金に郵便を送る場合、同じ大学であるにも関わらず、住所を全て書くのは面倒なことであろう。ここで関西大学専用の郵便局を作れば問題は解決される(これは「学内便」と呼ばれる)。そうすれば差出人は「ラーメン学部 宋」、受取人は「ラーメン研究支援課 金」と書くだけで郵便物は届く。つまり、「大阪府吹田市山手町3-3-35 関西大学」は省略できる(同じ市区町村内の引っ越した際、転入・転出届けの住所欄に市区町村名までは省略できるのと同じ)。また、関西大学がなぜかキャンパスを沖縄に移転した場合を考えてみよう(もはや関西大学ではないが…)。学内便がなければ、郵便物の住所を全て「沖縄県〜」に変えなければならない。しかし、学内便が存在すればこれまで使ってきた「ラーメン学部 宋」という表記は有効であろう。
このようにRStudioのプロジェクト機能は必須といっても過言ではない。簡単な計算目的として使う場合は問題ないが、何かの分析をする時、授業の実習時、課題時には必ずRStudioの右上が「Project: (None)」になっていないことを確認しよう。
これまで紹介したパスの書き方で/
(WindowsならC:\
)から始まるパスは、絶対パス(absolute path)またはフルパス(full path)と呼ばれる。これはファイル名を最上位フォルダーを起点に書く方法である。一方、/
(WindowsならC:\
)で始まらないパスは相対パス(relative path)呼ばれ、ファイル名を作業フォルダーを起点に書く方法である。
4 本講義でおすすめするフォルダー構造
プロジェクトを作成すれば、プロジェクトフォルダー内に以下のようなフォルダーを作成しよう。
- 表形式のデータを読み込んだり、保存したりするのであれば
Data
フォルダーをプロジェクトフォルダー内に作成する。.csv
、.xlsx
、.sav
、.dta
のような表形式ファイルはData
フォルダーに入れる。- データを加工し、保存する場合は
Data/ファイル名.csv
などと指定する。
- 図を作成し、保存する予定があれば、
Figs
フォルダーをプロジェクトフォルダー内に作成する。- 図を保存する場合、ファイルのパスを
Figs/ファイル名.png
やFigs/ファイル名.pdf
とする。
- 図を保存する場合、ファイルのパスを
よく分からない場合はとりあえずプロジェクトフォルダー内にData
とFigs
というフォルダーを作っておこう。ただし、.R
、.qmd
などコードファイルはプロジェクトフォルダーの下位フォルダーに入れず、プロジェクトフォルダーの直に入れよう4。この場合、R Markdown / Quartoで作成された文書(.html
、.pdf
など)は.Rmd
や.qmd
ファイルと同じフォルダーに保存される(別途の設定をすれば別フォルダーに保存することも可能だが、そこまではしなくても良い)。
5 参考
以下の内容も合わせて読むことを強く推奨する。
- 宋財泫・矢内勇生.『私たちのR』の「ファイルシステム」
脚注
一部、拡張子を持たないファイルもある。↩︎
文書ファイルが
.pdf
以外にも.docx
、.odt
、.txt
などがあるように、画像ファイルも.png
だけでなく、.jpg
、.gif
、.bmp
、.svg
など様々なフォーマットがある。↩︎ただし、LMSに提出する場合、ファイル名をわざわざ修正しなくても良い。教員側からダウンロードする際、勝手に学生番号と氏名が付いたファイル名になるからだ。↩︎
人によってはスクリプトファイルを
Script
フォルダー内に入れる人もいるが推奨しない。とりわけ、R MarkdownやQuartoの場合、コンソール上で実行時のパスとKnit時のパスの扱いが異なる場合が多い。プロジェクトフォルダーに入れておけば、問題は解決される。↩︎