ファイル名に一意の番号または文字列を追加できるR関数/ループはありますか?

Aug 18 2020

私はRとStackOverflowを初めて使用します。私は自分の質問に対する答えを広範囲に探しましたが、これが繰り返しの質問であるとは思いません。

スクリプトにデータフレームとして読み込まれる.csvファイルがあり、それらのデータフレームを.Rdaまたは.RDSファイルとして保存する必要があります。

コードを書く方法では、古い.Rdaファイルは保存先のディレクトリに上書きされます。

base::save(data, file="data.Rda")

保存時に既存のファイル名に乱数や文字列を付加するループを作成する方法や、一意のID番号を生成する関数を作成する方法はありますか?私が探しているのは、次のような出力です。

data_1.Rda data_2.Rda data_3.Rdaなど、コードを実行するたびに_#がランダムに生成されます。

私は次のようなベクトルを作成しようとしました

x<-c(a, b, c, d, e, f, g, h, i, j, k)

次に、個々の変数を保存するためのループを作成しましたが、ループは単にデータフレームを「a」、「b」、「c」として保存しました...これらの個々の変数をにアタッチする方法があるかどうか知りたいです既存の名前( "data_a.Rda"、 "data_b.Rda" ...)

それが機能する限り、私はどの方法にもこだわっていません。

回答

1 AllanCameron Aug 18 2020 at 03:33

次のようなディレクトリがあるとします。

/Documents (R home)
     |
     |-- my_data
             |
             |--data_1.Rda
             |--data_2.Rda

次に、my_dataディレクトリ内のファイルを次のように一覧表示できます。

list.files(path.expand("~/my_data/"))
#> [1] "data_1.Rda"  "data_2.Rda"

そして、簡単な関数で「次の」Rdaファイルパスを生成できます。

next_rda <- function() {
  f <- list.files(path.expand("~/my_data/"), pattern = "^data_\\d+\\.Rda")
  num <- max(as.numeric(gsub("^data_(\\d)\\.Rda", "\\1", f)) + 1)
  paste0(path.expand("~/my_data/data_"), num, ".Rda")
}

私ができるように:

next_rda()
#> [1] "C:/Users/Administrator/Documents/my_data/data_3.Rda"

これは、オブジェクトを保存したい場合、次のことができることを意味します。

save(obj, file = next_rda())

これは次の増分ファイルに保存されます。この関数は毎回ディレクトリをチェックするため、常に適切な番号の新しいファイルに書き込みます。

toujames Aug 18 2020 at 03:12

ファイル名の有無を確認します。存在する場合は、新しいファイル名を作成するための並べ替えメカニズムを作成します。ランダムに生成された文字列であろうと、ナンバリングシステムであろうと。

参考:次の方法で、1つのrdaファイルに複数の変数を格納できます。

> save(data1, data2, data3, file = "data.rda")

pseudospin Aug 18 2020 at 03:19

をご覧ください?tempfile。使用する一意のファイル名を生成できます。