web-dev-qa-db-ja.com

Rを使用してファイルをコピーする

WindowsでのR実行で実行されるより大きなタスクの一部として、選択したファイルをディレクトリ間でコピーしたいと思います。 R内でcp patha/filea*.csv pathb(ワイルドカードに注意してください)のようなコマンドを与えることは可能ですか?

32
gappy

私は直接的な方法はないと思いますが(砲撃の恥ずかしがり屋)、通常は次のようなものがうまくいきます。

_flist <- list.files("patha", "^filea.+[.]csv$", full.names = TRUE)
file.copy(flist, "pathb")
_

メモ:

  • 私はわざと2つのステップで分解しましたが、組み合わせることができます。
  • 正規表現を参照してください。Rは真の正規表現を使用し、2つの個別の引数でファイルパターンをパスから分離します。
  • 正規表現の_^_と_$_(beg/end of string)に注意してください-これは一般的な問題です。これらはワイルドカードタイプのパターンに暗黙的ですが、正規表現では必須です(一部のファイル名はありません)ワイルドカードパターンに一致するだけでなく、追加テキストで開始および/または終了することもできます)。
  • Windowsの世界では、このOSではディレクトリ検索で大文字と小文字が区別されないという事実をエミュレートするために、人々は通常_ignore.case = TRUE_引数を_list.files_に追加します。
  • Rのglob2rx()関数は、ワイルドカードパターンを正規表現に変換する便利な方法を提供します。たとえば、fpattern = glob2rx('filea*.csv')は、異なるが同等の正規表現を返します。
46
mjv

あなたはできる

  • system()を使用して、コマンドがシェル上にあるかのように起動し、グロビングを含む
  • list.files() aka dir()を使用して、自分と一致するグロビング/ reg.expを実行し、ファイルを個別にコピーします
  • 使用する file.copy mjvの回答に示されているように、個々のファイル
12