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.
Funkcja gsub() działa idealnie dla moich celów. Jeszcze raz dziękuję Shane. – Milktrader
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
dzięki za uwagę na temat leniwej oceny! –