如何从R中的函数将对象加载到当前环境?

时间:2012-10-30 19:38:06

标签: r

而不是做

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

我想调用类似

的函数
loadBigObjects(list("a","b"))

并且能够访问ab个对象。

3 个答案:

答案 0 :(得分:6)

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

一般来说有很多选择:

  • sys.source()允许将R文件提供给给定的环境
  • load(),它会将.Rdata文件加载到指定的环境
  • assign()loadBigObjects()创建的任何对象或readRDS()的调用相结合,也可以将对象加载到给定的环境。

在您的函数中,您需要使用globalenv()指定将对象加载为全局环境的环境。如果不这样做,那么该对象将仅存在于正在运行的loadBigObjects()的评估框架中。 E.g。

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

(根据您对@ GSee的答案的评论,并假设list("a","b")readRDS()找到并打开对象的足够信息。

答案 1 :(得分:3)

在不知道loadBigObject是什么或做什么的情况下,您可以使用lapply将函数应用于对象列表

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

如果您提供了loadBigObject的代码或者至少描述了它应该执行的操作,则可能会编写更好的loadBigObjects函数。

答案 2 :(得分:2)

assign函数可用于在当前环境中定义变量。

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

(这不一定是个好主意。)