【问题标题】:How to save workspace image to a specified location within an R function如何将工作区图像保存到 R 函数中的指定位置
【发布时间】:2014-05-12 16:31:48
【问题描述】:

我想将全局工作区图像保存在 R 函数中,但遇到了范围界定问题。这是一个如何工作的示例:

rm(list=ls())

SaveData <- function(fname) {
  # I have to use save instead of save.image due to separate constraints
  save(list=ls(), file=fname, envir=.GlobalEnv)
}

# Test
x <- 1
SaveData("~/SaveDataTest.RData")

rm(list=ls())
load("~/SaveDataTest.RData")
ls() # Would look for this to include x

SaveData("~/SaveDataTest.RData") 行会引发以下错误:

Error in save(list = ls(), file = fname, envir = .GlobalEnv) :  
object ‘fname’ not found 

这表明将envir=.GlobalEnv 传递给save 函数会将整个函数的环境切换到.GlobalEnv。我该如何解决这个问题?

【问题讨论】:

  • 为什么指定envir?鉴于ls(),这似乎是多余的。如果我删除envir,至少它对我有用。这与save.image() 有何不同?
  • 删除 envir 只会保存函数的工作区。关于save.image(),我正在处理单独的技术限制(这里无法描述),这将我限制在save
  • 具体来说,你会看到如果你删除envir,最后的ls() 调用将不会显示x
  • 好的,谢谢。我现在知道了。我专注于“未包装”的解决方案。

标签: r scoping


【解决方案1】:

list=ls() + envir=.GlobalEnv 替换为list=ls(.GlobalEnv) 有效:

SaveData <- function(fname) {
  save(list=ls(.GlobalEnv), file=fname)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 2015-07-01
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多