6

以前の分析で保存した1つのデータフレームを含む多くの.RDataファイルがあり、データフレームにはロードされた各ファイルに同じ名前が付いています。たとえば、load(file1.RData)を使用すると、「df」というデータフレームが取得され、次にload(file2.RData)を使用すると、同じ名前の「df」というデータフレームが取得されます。これらすべての.RDataファイルを一度にロードする必要があるため、これらすべての.RDataファイルを1つの大きな.RDataファイルに結合することは可能かどうか疑問に思いました。各dfの名前はファイル名と同じであるため、異なるものを使用できます。データフレーム。

以下のコードを使用してこれを行うことができますが、これは非常に複雑です。これを行うにはもっと簡単な方法が必要です…ご提案ありがとうございます。

3つの.RDataファイルがあり、すべてを「main.RData」というファイルに特定の名前で保存したいとします(現在はすべて「df」として出力されます)。

all.files = c("/Users/fra/file1.RData", "/Users/fra/file2.RData", "/Users/fra/file3.RData")
assign(gsub("/Users/fra/", "", all.files[1]), local(get(load(all.files[1]))))
rm(list= ls()[!(ls() %in% (ls(pattern = "file")))])
save.image(file="main.RData")


all.files = all.files = c("/Users/fra/file1.RData", "/Users/fra/file2.RData", "/Users/fra/file3.RData")

for (f in all.files[-1]) {
  assign(gsub("/Users/fra/", "", f), local(get(load(f))))
  rm(list= ls()[!(ls() %in% (ls(pattern = "file")))])
  save.image(file="main.RData")
}
4

2 に答える 2

5

これは、いくつかの既存の投稿を組み込んだオプションです

all.files = c("file1.RData", "file2.RData", "file3.RData")

複数のデータフレームを 1 つの名前付きリストに読み込む ( R データ ファイルから指定した変数名にオブジェクトを読み込むにはどうすればよいですか? )

mylist<- lapply(all.files, function(x) {
  load(file = x)
  get(ls()[ls()!= "filename"])
})

names(mylist) <- all.files #Note, the names here don't have to match the filenames

リストを保存するか、保存する前にデータフレームをグローバル環境に転送できます (データフレームのリストを非表示にする) 。

list2env(mylist ,.GlobalEnv)

または、データフレームが同一で、単一の大きなデータフレームを作成したい場合は、リストを折りたたんで、寄与するファイルの名前を持つ変数を追加できます (リスト内のデータフレーム; データフレームの名前を持つ新しい変数を追加します)。

all <- do.call("rbind", mylist)
all$id <- rep(all.files, sapply(mylist, nrow))
于 2016-01-10T23:21:16.390 に答える
4

私が見た最良の答えは、現在追跡できないSOの回答からコピーした以下のコードだと思います。原作者に失礼。

resave <- function(..., list = character(), file) {
   previous  <- load(file)
   var.names <- c(list, as.character(substitute(list(...)))[-1L])
   for (var in var.names) assign(var, get(var, envir = parent.frame()))
   save(list = unique(c(previous, var.names)), file = file)
}
#I took advantage of the fact the load function 
#returns the name of the loaded variables, so 
#I could use the function's environment instead of creating one.
#And when using get, I was careful to only look in the 
#environment from which the function is called, i.e. parent.frame()
于 2013-02-07T18:00:33.140 に答える