2010-04-26 10 views
16

Używam pakietu quantmod do importowania danych z serii finansowych z Yahoo.Jak zmienić nazwę obiektu R?

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

Chciałbym zmienić nazwę obiektu "GSPC" na "SPX". Próbowałem funkcji zmiany nazwy w pakiecie przekształcenia, ale zmienia tylko nazwy zmiennych. Obiekt "GSPC" ma wektory GSPC.Open, GSPC.High, itp. Chciałbym, aby moja zmiana nazwy "GSPC" na "SPX" również zmieniła GSPC.Open na SPX.Open i tak dalej.

Odpowiedz

28

Zmiana nazwy przedmiotu oraz colnames wewnątrz niego jest procesem dwuetapowym:

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

przeciwnym razie funkcja getSymbols pozwala nie automatycznego przypisywania, w którym to przypadku można pominąć pierwszy krok (ty nadal będzie musiał zmienić nazwy kolumn).

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

Komentarz @backlin

R zatrudnia tzw leniwa oceny. Efektem tego jest fakt, że podczas "kopiowania" SPY <- GSPC faktycznie nie przypisujesz nowej przestrzeni do pamięci dla SPY. R wie, że obiekty są identyczne i tworzy tylko nową kopię w pamięci, jeśli jedna z nich jest zmodyfikowana (, tj., gdy nie są już identyczne, , np. po zmianie nazw kolumn w poniższym wierszu). Więc wykonując

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

nigdy naprawdę skopiować GSPC lecz jedynie nadać mu nową nazwę (SPY), a następnie powiedzieć R zapomnieć imię (GSPC). Po zmianie nazw kolumn nie trzeba tworzyć nowej kopii SPY od GSPC już nie istnieje, co oznacza, że ​​naprawdę zmieniono nazwę obiektu bez tworzenia kopii pośrednich.

+0

Funkcja gsub() działa idealnie dla moich celów. Jeszcze raz dziękuję Shane. – Milktrader

+10

Zaskoczyło mnie to przez jakiś czas, więc chciałem dodać tę część do leniwej oceny, aby wyjaśnić ją także innym. Mam pamięć i czas wyprofilowałem przykład, aby sprawdzić, czy tak właśnie jest, co dzieje się wewnątrz R. – Backlin

+7

dzięki za uwagę na temat leniwej oceny! –