ご挨拶
ファイルからデータをインポートしたり、処理したデータをファイルとしてエクスポートしたり、といったことをR上で行うときの話です。
※※独学の部分も多いので、修正点等あればお気軽にコメントでのご指摘をお願いします……。
前の記事はコチラ
【都市・観光情報学でのRマニュアル】1 データ型
【都市・観光情報学でのRマニュアル】2 データ構造
【都市・観光情報学でのRマニュアル】3 Rの基本構文
1. 基本用語
・ パス
ファイルの保存場所を示す住所のようなもので、データの読み込みや保存の際に必ず関わってくる。
基本的には、
ディレクトリ/ ... /ファイル名.拡張子
のように表されることが多い。
注意
パスを正確に指定しないとファイルを読み込めなかったり保存先を見失ったりするので注意が必要。
・ ディレクトリ
ファイルを整理するためのフォルダのこと。
フォルダの中にフォルダを入れて入れ子構造(ツリー構造)にすることもできる。
・ 拡張子
人間やOSがファイルの形式を判別しやすくするための文字列で、ファイルの後ろに付く。
例:.pdf, .csv, .tar.gz, ...
・ ワーキングディレクトリ
Rが今作業しているディレクトリのこと。
ファイルパスを指定するときの基準になる。
# 現在のワーキングディレクトリを確認
getwd()
# [1] "C:/Users"
# <- 現在RはC:ドライブ下のUsersというディレクトリをパス設定の基準としている。
# ディレクトリ内のファイル・フォルダを確認
list.files()
# [1] "20250228hotel.csv" "All Users" "Default" "Default User"
# [2] "desktop.ini" "none" "Public"
# <- ワーキングディレクトリ("C:/Users")内のファイル・フォルダの相対パス(→ Tips:絶対パスと相対パス)が検索される。
Tips:絶対パスと相対パス
・絶対パス
コンピューター上のファイルの場所を完全に指定する方法。
ワーキングディレクトリに関係なくファイルを指定できるのがメリット。
"F:/pseudo/tourist/Takao/13Tokyo.feather"
・ 相対パス
ワーキングディレクトリを基準にしてファイルパスを指定する方法。
"./tourist/Takao/13Tokyo.feather"
補足
プロジェクトごとコードを移動させるときなどに便利だが、ワーキングディレクトリが変更された場合使えなくなる。
2. 実践的な操作
・ ワーキングディレクトリの確認と変更
# ワーキングディレクトリ確認
getwd()
# [1] "C:/Users"
# ワーキングディレクトリを変更&改めて確認
setwd("F:/pseudo")
getwd()
# [1] "F:/pseudo"
・ ディレクトリの存在確認(→無ければ新規作成)
dir_name <- "F:/research"
if(!dir.exists(dir_name)) dir.create(dir_name)
・ パスの作成
# 保存先の親ディレクトリ
work_root <- "F:/research"
# 保存先の子ディレクトリ
pref_dir <- "people_flow"
# 保存するファイル名
file_name <- "13Tokyo.csv"
output_dir <- file.path(work_root, pref_dir, file_name)
output_dir
# [1] "F:/research/people_flow/13Tokyo.csv"
・ ディレクトリ内のサブディレクトリ, ファイルのパスの取得
# サブディレクトリ名の取得
work_root <- "F:/Pseudo"
list.dirs(work_root, recursive = FALSE)
# [1] "F:/Pseudo/attributes"
# [2] "F:/Pseudo/temp"
# [3] "F:/Pseudo/tourist"
# [4] "F:/Pseudo/touristGPKG"
# [5] "F:/Pseudo/touristID"
# [6] "F:/Pseudo/trajectory"
# ファイルパスの取得
work_root <- "F:/Pseudo/tourist/Karuizawa"
list.files(work_root, recursive = FALSE)
# [1] "10Gunma.feather" "11Saitama.feather" "13Tokyo.feather"
# [2] "19Yamanashi.feather" "20Nagano.feather"
3. 登場した関数
・ ワーキングディレクトリを確認する関数
返り値としてワーキングディレクトリのパスが返される。
getwd()
| 引数 | 説明 |
|---|---|
| 引数を設定するとエラーが発生する |
・ ワーキングディレクトリを変更する関数
setwd(dir)
| 引数 | 説明 |
|---|---|
dir |
移動先のパス(文字列型), 絶対パスでも相対パスでも指定可能だが、存在しないパスを指定するとエラーが発生する。 |
・ ディレクトリが存在するかを確認する関数
指定パスが存在するかどうかをTRUE/FALSEで返す。
複数パスを指定した場合はベクトルで返される。
dir.exists(path)
| 引数 | 説明 |
|---|---|
path |
確認したいディレクトリのパス(文字列型、ベクトル形式での複数指定も可能) |
・ ディレクトリを新規作成する関数
dir.create(path, showWarnings, recursive, mode = "0777")
| 引数 | 説明 |
|---|---|
path |
作成したいパス(文字列型) |
showWarnings |
既にpathが存在する際などに警告を表示するかどうかを論理型で指定。省略時はTURE。 |
recursive |
TRUEにすると途中の階層が存在しない場合でもまとめてディレクトリを作成する。FALSEにすると途中の階層が存在しない場合はエラーとなる。 |
mode |
内部的な引数なので指定の必要なし。 |
・ OSに合わせた区切り文字でパスを作成する関数
ファイルパスにおけるディレクトリ間の区切り文字はOSやソフトによって異なる。
例:Windowsは\、Macは/ (Rでは、\を使うとエラーになることが多い。)
file.path()は自動で区切り文字を設定して、安全なファイルパスを作成することができる。
file.path(..., fsep)
| 引数 | 説明 |
|---|---|
... |
ファイルパスの各部分(ディレクトリ名、サブディレクトリ名、ファイル名)を文字列型で指定 |
fsep |
パス区切り文字を指定、省略時はOSに準拠した区切り文字(.Platform$file.sep) |
・ ディレクトリ内のサブディレクトリのパスを取得する関数
指定したディレクトリの中にあるサブディレクトリのパスがベクトル形式で返る。
list.dirs(path, full.names, recursive)
| 引数 | 説明 |
|---|---|
path |
対象のディレクトリを指定、省略時はワーキングディレクトリ.
|
full.names |
フルパスで返すかをTRUE/FALSEで指定。省略時はTRUE。 |
recursive |
階層を辿ってサブディレクトリを取得するかをTRUE/FALSEで指定。TRUEの場合は入れ子構造になったサブディレクトリを全て取得するが、FALSEの場合は指定ディレクトリ直下のサブディレクトリのみ取得する。省略時はTRUE。 |
・ ディレクトリ内のファイルのパスを取得する関数
list.files(path, pattern, all.files, full.names, recursive, ignore.case, include.dirs, no..)
| 引数 | 説明 |
|---|---|
path |
対象ディレクトリを指定、省略時はワーキングディレクトリ.
|
pattern |
取得するファイル名の正規表現パターン。省略可能。 |
all.files |
隠しファイルも取得するかをTRUE/FALSEで指定。省略時はFALSE
|
full.names |
フルパスで返すかをTRUE/FALSEで指定。省略時はTRUE。 |
recursive |
階層を辿ってサブディレクトリを取得するかをTRUE/FALSEで指定。TRUEの場合は入れ子構造になったサブディレクトリを全て取得するが、FALSEの場合は指定ディレクトリ直下のサブディレクトリのみ取得する。省略時はFALSE。 |
ignore.case |
patternの大文字/小文字を区別しないかどうかをTRUE/FALSEで指定。省略時はFALSE
|
include.dirs |
ディレクトリも返すかをTRUE/FALSEで指定。省略時はFALSE
|
no.. |
ワーキングディレクトリ.や親ディレクトリ..を含めないかをTRUE/FALSEで指定。省略時はFALSE
|
次の投稿
大規模なデータを保存するのに適したファイル形式を紹介すると思います。