使用带有对象名称的变量保存对象

时间:2012-06-18 13:55:52

标签: r save

  

可能重复:
  how to save() with a particular variable name

我想知道在R中保存对象是一种简单的方法,使用带有要保存对象名称的变量objectName。我希望这可以轻松保存对象,其名称在文件名中。

我尝试使用get,但我没有设法使用原始对象名称保存对象。

示例:

如果我有一个名为“temp”的对象,我想将其保存在“dataDir”目录中。我将对象的名称放在变量“objectName”中。

尝试1:

objectName<-"temp"
save(get(objectName), file=paste(dataDir, objectName, ".RData", sep=""))
load(paste(dataDir, objectName, ".RData", sep=""))

这不起作用,因为R尝试保存名为get(objectName)的对象,而不是此调用的结果。所以我尝试了以下内容:

尝试2:

objectName<-"temp"
object<-get(objectName)
save(object, file=paste(dataDir, objectName, ".RData", sep=""))
load(paste(dataDir, objectName, ".RData", sep=""))

这显然不起作用,因为R保存名为“object”的对象,而不是名称“temp”。加载后我有一个“对象”的副本,而不是“临时”。 (是的,内容相同......但这不是我想要的:))。所以我认为它应该是指针。所以尝试了以下内容:

尝试3:

objectName<-"temp"
object<<-get(objectName)
save(object, file=paste(dataDir, objectName, ".RData", sep=""))
load(paste(dataDir, objectName, ".RData", sep=""))

与尝试2的结果相同。但我不确定我在做我认为我正在做的事情。

这是什么解决方案?

2 个答案:

答案 0 :(得分:18)

尝试save(list=objectName, file=paste(objectName, '.Rdata', sep='') )

关键是list的{​​{1}}参数获取一个字符串列表,这些字符串是要保存的对象的名称(而不是通过save传递的实际对象)。

答案 1 :(得分:1)

我发现你的例子难以理解,但我可以想到你想要的两种可能性。您要么将文件名保存为objectName.RDatatemp.RData。以下是您如何做到这两点:

objectName<-"temp"

# This saves the object as "temp.RData"
save(objectName, file=paste(dataDir, objectName, ".RData", sep=""))
# Loading it will bring it back with the name objectName, and the value temp
load(paste(dataDir, 'temp', '.RData', sep=''))

# This saves the object as "objectName.RData"
save(objectName, file=paste(dataDir, deparse(substitute(objectName)), ".RData",    sep=""))
# Loading it will bring it back with the name objectName, and the value temp
load(paste(dataDir, 'objectName', '.RData', sep=''))

由于您错误地调用了get,所有尝试都会返回错误。应该是get('objectName'),但是如果你考虑一下,那就会得到与objectName完全相同的东西。