【发布时间】:2021-12-02 12:21:28
【问题描述】:
我正在尝试编写一个函数,它将文件夹名称和变量名称作为参数传递给 R 的基本保存/加载函数。我已经使用deparse(substitute(variable name)) 将变量名称作为参数名称传递,基于其他帖子上的 cmets。
试用:我的工作目录下的文件夹名称是SData,变量是x和y;我想为每个 x 和 y 创建一个 .RData 文件。
x <- 1:100
y <- "string"
getSave <- function(folder, rdata){
save(rdata, file = paste0("./", deparse(substitute(folder)), "/",
deparse(substitute(rdata)), ".RData"))
}
getSave(SData, x)
getSave(SData, y)
这些文件保存为 x.RData 和 y.RData,如我所愿。现在,让我们清除环境并使用类似的函数加载数据:
rm(x, y)
getLoad <- function(folder, rdata){
load(paste0("./", deparse(substitute(folder)), "/",
deparse(substitute(rdata)), ".RData"))
}
getLoad(SData, x) # does not work
getLoad(SData, y) # does not work
load("./SData/x.RData") # loads x but with variable name rdata
load("./SData/y.RData") # loads y but with variable name rdata
getLoad() 应该在环境中将 x.RData 作为 x 加载,对于 y 也是如此。虽然该函数不起作用,但基本加载函数会在环境中加载名称为 rdata 的两个变量,其中 x 和 y 的值分别为。
我试图了解 deparse(substitute()) 是如何在这里工作的。另外,在我的函数中用实参变量名替换实际变量名导致这个加载问题的原因是什么?
【问题讨论】:
-
文件夹名称可以作为“SData”或SData 传递。然而,主要问题是从目录文件夹加载 RData。即使使用“SData”,基本加载函数也会在环境中返回变量名称“rdata”。