我想知道在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的结果相同。但我不确定我在做我认为我正在做的事情。
这是什么解决方案?
答案 0 :(得分:18)
尝试save(list=objectName, file=paste(objectName, '.Rdata', sep='') )
。
关键是list
的{{1}}参数获取一个字符串列表,这些字符串是要保存的对象的名称(而不是通过save
传递的实际对象)。
答案 1 :(得分:1)
我发现你的例子难以理解,但我可以想到你想要的两种可能性。您要么将文件名保存为objectName.RData
或temp.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
完全相同的东西。