R 一括処理 - eiichiromomma/CVMLAB GitHub Wiki
R) 一括処理
(特定のファイルを一括して処理する作業
ディレクトリ階層
Rを作業ディレクトリとして以下のような階層を用いる。
R
|-- myfunction.R
|-- GroupA
| |-- a-01.jpg)
| |-- a-02.jpg)
| |-- a-03.jpg)
| |-- a-04.jpg)
| |-- a-05.jpg)
| `-- table.csv
`-- GroupB
|-- b-01.jpg)
|-- b-02.jpg)
|-- b-03.jpg)
|-- b-04.jpg)
|-- b-05.jpg)
|-- b-06.jpg)
|-- b-07.jpg)
|-- b-08.jpg)
`-- table.csv
table.csvは各画像に関する撮影地点等のデータを入れる。例えば、
filename,Name,Place,From,To
a-01.jpg),GroupA,x-1,20,23
a-02.jpg),GroupA,x-2,25,30
a-03.jpg),GroupA,x-2,38,50
a-04.jpg),GroupA,x-2,100,110
a-05.jpg),GroupA,x-3,111,120
とする。
グループ内を一括処理
グループ名gnameを引数とする関数を作り、
filelist <- list.files(path=fname,pattern=".jpg)")
imagelist <- read.csv(sprintf("%s/table.csv",fname))
とするとfilelistはファイル名が列挙されたベクトルになり、imagelistはcsvに並んだ通りのデータフレームになる。 二つのデータの関連付けは
imagelist[imagelist$filename==filelist[k],]$Place
と指定するとfilelist[k]に該当する画像のPlaceが得られる。
グループも一括処理
"ディレクトリだけ"という指定はできないので、グループ名の付け方を工夫する必要がある。 例の構成であれば
grouplist <- list.files(pattern="Group")
とすればディレクトリのリストが得られる。 そのリストをループでグループ内処理の関数に渡せば良い。
list.filesの引数recursiveをTRUEとすれば作業を分けずに行なえそうだが、考えるのが面倒なので分業にした。