Contents


実行環境(919日追記)



list.files関数は「ファイルの名前順」に固定されてるぽい

本当はもっと数が多いですが ↓ こんな風に番号付きで出力したファイル群を、出力した順序で連結とか集計等してほしいと言われ、まずファイルリストをベクトルに入れようとlist.files関数を使ったら、番号がゼロ埋めされてないため困りました。

ファイル名つまり文字列でソートするので、上のように「ファイル-1」の次が「ファイル-10」。この結果を正規表現で並べ替えることもできそうですが、今回はファイルの出力順序になればいいので保存時刻(最終更新時刻)でソートしよう。と思ったら、list.files関数は「ファイル名でソート」に固定されてる模様。


ドキュメントに
The files are sorted in alphabetical orderとあり、ソート順のオプションもなし。こういう意外な所で機能がないのが、Rならではという感じ。


system関数でOSのファイル表示コマンドを使えばOK

そこで代わりにsystem関数を使い、いろいろソートできるOSのファイル表示コマンドを呼び出します。今回はWindowsなのでDIR /b /od。/bオプションがファイル名のみ、/oがソート指定、dが時刻。
system('cmd /c dir /b /od')


system関数の戻り値を1行ずつベクトルにするには、オプションinternTRUEにします。詳細は上のドキュメントを参照。下が実行結果の画面。
files = system('cmd /c dir /b /od', intern=T) 


DIRコマンドは、/odオプションに加えて、ファイルの3つの時刻(作成、最終アクセス、最終更新)のどれでソートするか指定できます。最終更新なら/tw。参考までコマンドでのヘルプは下のとおり。/odのデフォルトは特に書かれてなく、今回試したところ最終更新時刻が既定のようでした。
> dir /?
ディレクトリ中のファイルとサブディレクトリを一覧表示します。

DIR [ドライブ:][パス][ファイル名] [/A[[:]属性]] [/B] [/C] [/D] [/L] [/N]
  [/O[[:]ソート順]] [/P] [/Q] [/R] [/S] [/T[[:]タイムフィールド]] [/W] [/X] [/4]

  [ドライブ:][パス][ファイル名]
              一覧表示するドライブ、ディレクトリ、またはファイルを指定します。

  /A          指定された属性のファイルを表示します。
  属性        D  ディレクトリ                R  読み取り専用
              H  隠しファイル                A  アーカイブ
              S  システム ファイル           I  非インデックス対象ファイル
               L  再解析ポイント             -  その属性以外
  /B          ファイル名のみを表示します (見出しや要約が付きません)。
  /C          ファイル サイズを桁区切り表示します。これは
              既定の設定です。/-C とすると桁区切り表示されません。
  /D          /W と同じですが、ファイルを列で並べ替えた一覧を表示します。
  /L          小文字で表示します。
  /N          ファイル名を右端に表示する一覧形式を使用します。
  /O          ファイルを並べ替えて表示します。
  ソート順    N  名前順 (アルファベット)     S  サイズ順 (小さい方から)
              E  拡張子順 (アルファベット)   D  日時順 (古い方から)
              G  グループ (ディレクトリから) -  降順
  /P          1 画面ごとに停止して表示します。
  /Q          ファイルの所有者を表示します。
  /R          ファイルの代替データ ストリームを表示します。
  /S          指定されたディレクトリおよびそのサブディレクトリのすべての
              ファイルを表示します。
  /T          どのタイム フィールドを表示するか、または並べ替えに使用するかを
              指定します。
  タイムフィールド
              C  作成
              A  最終アクセス
              W  最終更新
  /W          ワイド一覧形式で表示します。
  /X          このオプションは MS-DOS 形式以外のファイル名に対する短い名前を
              表示します。長い名前の前に短い名前を表示する点を除けば、
              /N オプションと同じです。短い名前がない場合は、ブランクに
              なります。
  /4          4 つの数字で年を表示します。

環境変数 DIRCMD にスイッチを設定できます。
/-W のように - (ハイフン) を前に付けると、そのスイッチは無効になります。


補足: ConEmu + Rtermだと、日本語ファイル名が化ける

普段はWindows + ConEmu + Rtermの環境で使ってますが、今回はファイル名に非アスキーが入っていて文字化けし、Rコンソールにしたら正常でした。例えばlist.filesを上記環境で実行すると ↓ こんな感じ。

system関数では、戻り値の表示は正常なものの、変数に入れて表示するとやっぱり文字化け。

コンソールのコードページをいろいろ変えて試しましたが、今のところ解消策は見つからず。ConEmuの設定はまだ変更を試してないので、もう少し調べます。