而不是做
a <- loadBigObject("a")
b <- loadBigObject("b")
我想调用类似
的函数loadBigObjects(list("a","b"))
并且能够访问a
和b
个对象。
答案 0 :(得分:6)
目前尚不清楚loadBigObjects()
做了什么或在哪里寻找a
和b
。它如何从文件或源代码加载对象?
一般来说有很多选择:
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
}
(这不一定是个好主意。)