109

を使用して変数を R データ ファイルに保存すると、変数を保存saveしたセッションで使用されていた名前で保存されます。後で別のセッションからロードしようとすると、同じ名前でロードされますが、ロード スクリプトが認識できない可能性があります。この名前は、読み込みセッションで同じ名前の既存の変数を上書きする可能性があります。既存の変数を破壊するリスクなしに、データ ファイルから指定された変数名にオブジェクトを安全にロードする方法はありますか?

例:

セッションの保存:

x = 5
save(x, file="x.Rda")

セッションのロード:

x = 7
load("x.Rda")
print(x) # This will print 5. Oops.

どのように動作させたいか:

x = 7
y = load_object_from_file("x.Rda")
print(x) # should print 7
print(y) # should print 5
4

8 に答える 8

105

.Rdata単一のオブジェクトを保存するだけの場合は、ファイルを使用しないでください。ファイルを使用して.RDSください。

x <- 5
saveRDS(x, "x.rds")
y <- readRDS("x.rds")
all.equal(x, y)
于 2011-04-07T13:40:57.893 に答える
38

新しい環境を作成し、.rda ファイルをその環境にロードして、そこからオブジェクトを取得できます。ただし、これにはいくつかの制限があります。オブジェクトの元の名前がわかっているか、ファイルに保存されるオブジェクトが 1 つしかないかのどちらかです。

この関数は、提供された .rda ファイルからロードされたオブジェクトを返します。ファイルに複数のオブジェクトがある場合、任意のオブジェクトが返されます。

load_obj <- function(f)
{
    env <- new.env()
    nm <- load(f, env)[1]
    env[[nm]]
}
于 2011-04-07T07:47:35.640 に答える
3

1 つのオブジェクトを含む Rdata ファイル

assign('newname', get(load('~/oldname.Rdata')))
于 2019-08-16T18:01:59.793 に答える
2

保存されたRdata / RDS / Rdaファイルではなく、プレーンソースファイルでこれを実行しようとしている場合、解決策は@Hong Ooiが提供するものと非常に似ています

load_obj <- function(fileName) {

  local_env = new.env()
  source(file = fileName, local = local_env)

  return(local_env[[names(local_env)[1]]])

}

my_loaded_obj = load_obj(fileName = "TestSourceFile.R")

my_loaded_obj(7)

版画:

[1] 「arg の値は 7 です」

そして、別のソース ファイル TestSourceFile.R で

myTestFunction = function(arg) {
  print(paste0("Value of arg is ", arg))
}

繰り返しますが、この解決策はファイルが 1 つだけある場合にのみ機能し、複数ある場合はそのうちの 1 つを返します (おそらく最初のファイルですが、保証されていません)。

于 2016-09-28T16:33:54.480 に答える