繁体   English   中英

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

[英]How do I load objects to the current environment from a function in R?

而不是做

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

我想调用一个函数

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

并能够访问ab对象。

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

总的来说,有很多选择:

  • 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM