我正在使用quantmod包从Yahoo进口金融系列数据。
library(quantmod)
getSymbols("^GSPC")
[1] "GSPC"
我想将对象“GSPC”的名称更改为“SPX”。我在reshape包中尝试了重命名功能,但它只更改了变量名。 “GSPC”对象有向量GSPC.Open,GSPC.High等。我想将“GSPC”重命名为“SPX”,也将GSPC.Open改为SPX.Open等。
答案 0 :(得分:33)
重命名对象及其中的共同名称是一个两步过程:
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知道对象是相同的,只有在其中一个被修改时才在内存中创建一个新副本(即当它们不再相同时,例如当你改变时以下行中的列名称)。所以通过做
SPY <- GSPC
rm(GSPC)
colnames(SPY) <- gsub("GSPC", "SPY", colnames(SPY))
你永远不会真正复制GSPC
,只是给它一个新名称(SPY
),然后告诉R忘记名字(GSPC
)。然后,当您更改列名称时,您不需要创建SPY
的新副本,因为GSPC
不再存在,这意味着您已经真正重命名了对象而没有创建中间副本。