[英]How do I load objects to the current environment from a function in R?
而不是做
a <- loadBigObject("a")
b <- loadBigObject("b")
我想调用一个函数
loadBigObjects(list("a","b"))
并能够访问a
和b
对象。
目前尚不清楚loadBigObjects()
做什么,或者它将在哪里寻找a
和b
。 如何从文件或源代码中加载对象?
总的来说,有很多选择:
sys.source()
允许将R文件来源到给定的环境 load()
会将.Rdata
文件加载到给定环境 assign()
结合由创建的任何对象loadBigObjects()
或到呼叫readRDS()
也可以装入一个目的是在给定的环境。 在函数中,您将需要使用globalenv()
将加载对象的环境指定为全局环境。 如果不这样做,则该对象将仅存在于正在运行的loadBigObjects()
的评估框架中。 例如
loadBigObjects <- function(list) {
lapply(list, function(x) assign(x, readRDS(x), envir = globalenv()))
}
(根据您对@GSee的答案的评论,并假设list("a","b")
足以供readRDS()
查找和打开对象。
在不了解loadBigObject
是什么或做什么的情况下,您可以使用lapply
将函数应用于对象列表
lapply(list("a", "b"), loadBigObject)
如果您提供了loadBigObject
的代码或至少描述了该代码应该执行的操作,则可能会编写更好的loadBigObjects
函数。
assign
函数可用于在当前环境以外的环境中定义变量。
loadBigObjects <- function(lst) {
lapply(lst, function(l) {
assign(l, loadBigObject(l), envir=globalenv())
}
lst
}
(并不是说这一定是个好主意。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.