1

する代わりに

a <- loadBigObject("a")
b <- loadBigObject("b")

次のような関数を呼び出したい

loadBigObjects(list("a","b"))

aそして、オブジェクトにアクセスできるようになりbます。

4

3 に答える 3

7

loadBigObjects()何をするのか、どこを探すのかは明確ではありませab。ファイルまたはソーシングコードからオブジェクトをどのようにロードしますか?

一般的に多くのオプションがあります:

  • sys.source()Rファイルを特定の環境にソースできるようにします
  • load().Rdata特定の環境にファイルをロードします
  • assign()loadBigObjects()によって作成されたオブジェクトまたはtoの呼び出しと組み合わせてreadRDS()、オブジェクトを特定の環境にロードすることもできます。

関数内から、を使用してオブジェクトをグローバル環境としてロードする環境を指定する必要がありますglobalenv()。そうしないと、オブジェクトは実行中の評価フレームにのみ存在しますloadBigObjects()。例えば

loadBigObjects <- function(list) {
    lapply(list, function(x) assign(x, readRDS(x), envir = globalenv()))
}

(@GSeeの回答へのコメントによると、オブジェクトを見つけて開くのにlist("a","b")十分な情報があると仮定します。readRDS()

于 2012-10-30T20:09:34.720 に答える
3

何が何であるかについて何も知らなくても、オブジェクトのリストに関数を適用するためにloadBigObject使用できますlapply

lapply(list("a", "b"), loadBigObject)

コードを提供したloadBigObjectか、少なくともそれが何をするのかを説明していれば、loadBigObjectsおそらくより良い関数を書くことができます。

于 2012-10-30T19:45:52.610 に答える
2

このassign関数を使用して、現在の環境以外の環境で変数を定義できます。

loadBigObjects <- function(lst) {
  lapply(lst, function(l) {
    assign(l, loadBigObject(l), envir=globalenv())
  }
  lst
}

(これは必ずしも良い考えではありません。)

于 2012-10-30T19:55:21.723 に答える