【问题标题】:Reading global environment from within a function in R从 R 中的函数中读取全局环境
【发布时间】:2019-06-11 11:41:32
【问题描述】:

我需要访问(即读取和保存)我正在工作的环境中的项目。我编写了以下函数来保存我的(全局)环境中的所有对象:

save_vars <- function(list.of.vars = NULL,
                      prefix = "StatusQuo",
                      path = "data") {
  if(is.null(list.of.vars)) list.of.vars <- ls()
  date_time <- Sys.time()
  if (!is.null(path))
    path <- paste0(path, "/")
  file_name <- paste0(path, prefix, "_", date_time, ".RData")
  save(list = list.of.vars, file = file_name)
}

这个想法是,如果没有list.of.vars 参数传递给函数,使用ls(),函数访问调用save_vars 的环境变量。但是,它仅将变量保存在函数本身的范围内。我知道我可以将函数称为 save_vars(ls()) 来完成这项工作,但有没有更简洁的方法?

【问题讨论】:

  • 这应该可以解决问题:ls(envir = .GlobalEnv)
  • 谢谢。 G. Grothendieck 提出了一种方法(传递parent.frame() 作为参数),该函数可以获得父环境(不限于全局环境)

标签: r environment-variables


【解决方案1】:

通过环境可能最干净:

fun <- function(envir = parent.frame()) ls(envir = envir)
fun()

这会列出调用者中的对象,但也允许用户更改使用的环境。例如,他们可以强制使用全局环境:

fun(.GlobalEnv)

【讨论】:

    猜你喜欢
    • 2016-03-27
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 2011-07-03
    • 2012-10-20
    • 2018-02-16
    相关资源
    最近更新 更多