1

而不是做

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

我想调用一个函数

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

并且能够访问ab对象。

4

3 回答 3

7

目前尚不清楚loadBigObjects()它会做什么或将在哪里寻找ab。它如何从文件或源代码中加载对象?

一般有很多选择:

  • sys.source()允许将 R 文件获取到给定环境
  • load()这会将.Rdata文件加载到给定的环境
  • assign()结合由创建的任何对象loadBigObjects()或调用来readRDS()也可以将对象加载到给定的环境中。

在您的函数中,您需要使用globalenv(). 如果您不这样做,那么该对象将仅存在于 running 的评估框架中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

Without knowing anything about what loadBigObject is or does, you can use lapply to apply a function to a list of objects

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

If you provided the code for loadBigObject or at least describe what it is supposed to do, a better loadBigObjects function could probably be written.

于 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 回答