2010-04-26 77 views
16

我正在使用quantmod軟件包從雅虎導入金融系列數據。如何重命名R對象?

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

我想改變對象的名稱爲「全球植物保護戰略」,以「SPX」。我已經嘗試了重塑包中的重命名函數,但它只更改變量名稱。 「GSPC」對象包含向量GSPC.Open,GSPC.High等。我希望將「GSPC」重命名爲「SPX」,以便將GSPC.Open更改爲SPX.Open等。

回答

28

重命名對象,並在所述colnames是一個兩個步驟的過程:

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

ř採用所謂惰性計算評論。其效果是,當你「複製」SPY <- GSPC時,你實際上並沒有在內存中爲SPY分配新的空間。 R知道這些對象是相同的,並且如果其中一個被修改(,即不再相同時,,例如,當你改變下一行中的列名稱時),僅在存儲器中產生新的副本。所以做

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

你從來沒有真正複製GSPC而只是給它一個新的名字(SPY),然後讓R忘記名字(GSPC)。當您更改列名時,您不需要創建SPY的新副本,因爲GSPC不再存在,這意味着您已真正重命名對象而不創建中間副本。

+0

gsub()函數完美適用於我的目的。再次感謝Shane。 – Milktrader 2010-04-27 00:26:57

+10

這使我困惑了一段時間,所以我想在懶惰評估中加入這個部分,以便爲其他人澄清。我有記憶和時間分析了這個例子,以驗證這實際上是R內發生的事情。 – Backlin 2012-12-17 10:03:37

+7

感謝關於懶惰評估的筆記! – 2013-02-14 21:03:54