如何重命名R对象?

Mil*_*der 21 r rename quantmod

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

library(quantmod)
getSymbols("^GSPC")
[1] "GSPC"
Run Code Online (Sandbox Code Playgroud)

我想将对象"GSPC"的名称更改为"SPX".我在reshape包中尝试了重命名功能,但它只更改了变量名."GSPC"对象有向量GSPC.Open,GSPC.High等.我想将"GSPC"重命名为"SPX",也将GSPC.Open改为SPX.Open等.

Sha*_*ane 37

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

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

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

SPY <- getSymbols("^GSPC", auto.assign=FALSE)
Run Code Online (Sandbox Code Playgroud)

来自@backlin的评论

R采用所谓的懒惰评估.这样做的效果是,当你"复制"时,SPY <- GSPC你实际上并没有在内存中分配新的空间SPY.R知道对象是相同的,只有在其中一个被修改时才会在内存中创建一个新副本(即,当它们不再相同时,例如当您更改下一行中的列名时).所以通过做

SPY <- GSPC
rm(GSPC)
colnames(SPY) <- gsub("GSPC", "SPY", colnames(SPY))
Run Code Online (Sandbox Code Playgroud)

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

  • 这让我困惑了一段时间,所以我想在延迟评估中添加部分,以便为其他人澄清.我有内存和时间分析示例来验证这实际上是在R.内部发生的事情. (12认同)