如何重命名 R 对象?

Posted

技术标签:

【中文标题】如何重命名 R 对象?【英文标题】:How do I rename an R object? 【发布时间】:2011-02-12 15:36:09 【问题描述】:

我正在使用 quantmod 包从 Yahoo 导入金融系列数据。

library(quantmod)
getSymbols("^GSPC")
[1] "GSPC"

我想将对象“GSPC”的名称更改为“SPX”。我已经尝试过 reshape 包中的 rename 函数,但它只会更改变量名。 “GSPC”对象具有向量 GSPC.Open、GSPC.High 等。我希望将“GSPC”重命名为“SPX”以将 GSPC.Open 更改为 SPX.Open 等。

【问题讨论】:

【参考方案1】:

重命名一个对象和其中的列名是一个两步过程:

SPY <- GSPC # assign the object to the new name (creates a copy)
colnames(SPY) <- gsub("GSPC", "SPY", colnames(SPY)) # rename the column names

否则,getSymbols 函数允许您自动分配,在这种情况下您可以跳过第一步(您仍然需要重命名列)。

SPY <- getSymbols("^GSPC", auto.assign=FALSE)

@backlin 的评论

R 采用了所谓的惰性求值。这样做的效果是,当您“复制”SPY &lt;- GSPC 时,您实际上并没有在内存中为SPY 分配新空间。 R 知道对象是相同的,并且只有在其中一个被修改时才会在内存中创建一个新副本(ie 当它们不再相同时,eg 当您更改下一行的列名)。所以通过这样做

SPY <- GSPC
rm(GSPC)
colnames(SPY) <- gsub("GSPC", "SPY", colnames(SPY))

你永远不会真正复制GSPC,而只是给它一个新名称(SPY),然后告诉R忘记第一个名字(GSPC)。然后,当您更改列名时,您不需要创建 SPY 的新副本,因为 GSPC 不再存在,这意味着您已经真正重命名了对象而没有创建中间副本。

【讨论】:

这让我困惑了一段时间,所以我想添加关于懒惰评估的部分以澄清它。我对示例进行了内存和时间分析,以验证这实际上是 R 内部发生的情况。

以上是关于如何重命名 R 对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 R 根据顺序父文件夹名称批量重命名许多文件

R语言rename重命名dataframe的列名实战:rename重命名dataframe的列名(写错的列名不会被重命名)

PHP - 如何重命名对象属性?

如何在R中重命名plotly的x轴?

通过添加前缀 -in R 重命名数据框的列

重命名R中的行和列