【问题标题】:function that returns a value stored as a variable in an RData file (without global vars)返回作为变量存储在 RData 文件中的值的函数(没有全局变量)
【发布时间】:2014-10-17 19:32:16
【问题描述】:

我想从存储的 RData 文件中获取特定的变量值。在 R 示例代码中,经常会加载涉及全局变量的数据集。

我想避免使用任何全局变量,而是编写一个函数来返回存储在 RData 文件中的变量的值。 (这也使得需要哪个变量更加明确。)

我如何编写一个函数来返回一个存储为 RData 文件中的变量的值(不使用任何全局变量)。

(我尝试了getVariableFromRDatabelow这个函数,但它有点麻烦,可能不正确。)

xx <- pi # to ensure there is some data
save(list = ls(all = TRUE), file= "all.RData")
rm(xx)

getVariableFromRData <- function(dataName, varName) {
    e <- new.env()
    load(dataName, envir=e)

    if(varName %in% ls(e)) {
        resultVar <- e[[varName]]
        return(resultVar)
    } else {
        stop (paste0("!! Error: varname (", varName,
                      ") not found in RData (", dataName, ")!"))
    }
}


yy <- getVariableFromRData("all.RData", "xx")

【问题讨论】:

  • 您的方法对我来说似乎很好,尽管使用 get 代替检查 varName 是否在 ls 的输出中会更干净,并且您不必自己创建错误。跨度>

标签: r


【解决方案1】:

您的解决方案看起来不错。比较我编写的函数(基于一些旧的 SO 问题)以修改 .Rdata 文件:

resave<- function (..., list = character(), file) 
{
    previous <- load(file)
    var.names <- c(list, as.character(substitute(list(...)))[-1L])
    for (var in var.names) assign(var, get(var, envir = parent.frame()))
    save(list = unique(c(previous, var.names)), file = file)
}

所以严格来说你不需要一个新的环境:你可以只查询load的输出,看看是否有想要的变量名。

【讨论】:

    猜你喜欢
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多