【问题标题】:Save object using variable with object name [duplicate]使用具有对象名称的变量保存对象[重复]
【发布时间】:2012-06-20 12:20:22
【问题描述】:

可能重复:
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 的结果相同。但我不确定我正在做我认为我正在做的事情。

解决办法是什么?

【问题讨论】:

    标签: r save


    【解决方案1】:

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

    关键是savelist 参数采用字符串列表,即要保存的对象的名称(而不是通过... 传递的实际对象)。

    【讨论】:

    • 这正是我所需要的,谢谢!
    • 你也可以使用paste0(objectName, '.RData'),这样可以省下几笔。
    【解决方案2】:

    我发现您的示例难以理解,但我可以想到您想要的两种可能性。您要么希望将文件名保存为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完全一样的东西。

    【讨论】:

    • 嗯...我认为我的例子不够清楚。我不是要保存对象“ObjectName”,而是要保存名为“temp”的对象。例如; “temp”是我想保存的data.frame。然后我只想做objectName &lt;- "temp" 并运行例如“保存”代码行。 (原因是我只需要更改对象名称的值,所有的保存和加载代码(以及其他一些东西)都不需要更改)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 2016-03-03
    • 1970-01-01
    相关资源
    最近更新 更多