2

リスト出力の関数があります。実行するたびに、saveを使用して結果をエクスポートしたいと思います。数回実行した後、ファイルを読み込んで結果を比較したいと思います。これを行うのは、タスクがいくつあるかわからないためです。おそらく、さまざまなコンピューターを使用して各タスクを計算します。では、アーカイブされたオブジェクトにどのように名前を付ければ、後ですべてを読み取ることができるのでしょうか。

私の最善の推測は、保存する前に変数に動的に名前を付け、オブジェクト名を追跡することですが、これは大したことではありません。

では、この問題にどのように取り組むべきでしょうか?

4

3 に答える 3

5

andの代わりにsaveRDSand関数を使用することをお勧めします。RDSバージョンの関数は、名前が付けられていない単一のオブジェクトを保存して読み取ります。オブジェクトを作成してファイルに保存し(または一意の名前を作成するために)、結果を処理するときに、一度に1つのオブジェクトを読み取るか、リストにいくつかを読み込んで操作します。readRDSsaveloadpaste0sprintf

于 2013-01-03T15:26:50.557 に答える
0

スコープを使用して、取得した名前を関数内で非表示にできるため、最初にリストをファイルに保存できます。

mybiglist <- list(fred=1, john='dum di dum', mary=3)
save(mybiglist, file='mybiglist1.RData')

次に、関数を介してそれをロードし直し、別のリスト内または単なるオブジェクトに好きな名前を付けることができます。

# Use the fact that load returns the name of the object loaded
# and that scope will hide this object
myspecialload <- function(RD.fnam) {
  return(eval(parse(text=load(RD.fnam))))
}
# now lets reload that file but put it in another object
mynewbiglist <- myspecialload('mybiglist1.RData')

mynewbiglist
$fred
[1] 1

$john
[1] "dum di dum"

$mary
[1] 3

これは実際には一般的な「どこでも使用」タイプの関数ではないことに注意してください。複数のオブジェクトを含むRDataファイルの場合、最後に保存されたオブジェクトを返すように見えます。

于 2013-01-03T15:42:00.823 に答える
0

ある時、私はいくつかのRDataファイルを与えられました、そしてそれらはすべてxと呼ばれる1つの変数しか持っていませんでした。ワークスペースでそれらすべてを読み取るために、各変数をその環境に順番にロードし、get()を使用してその値を読み取りました。

tenv <- new.env()
load("file_1.RData", envir = tenv)
ls(tenv) # x
myvar1 <- get(ls(tenv), tenv)
rm(tenv)
....

このコードは、ファイルごとに繰り返すことができます。

于 2013-01-03T19:12:33.463 に答える