如何重命名 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 <- 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语言rename重命名dataframe的列名实战:rename重命名dataframe的列名(写错的列名不会被重命名)