Как переименовать объект R?

Я использую пакет quantmod для импорта данных финансовой серии из Yahoo.

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

Я хотел бы изменить имя объекта "GSPC" на "SPX". Я пробовал функцию переименования в пакете reshape, но меняет имена переменных. Объект "GSPC" имеет векторы GSPC.Open, GSPC.High и т.д. Я бы хотел, чтобы мое переименование "GSPC" на "SPX" также изменило GSPC.Open на SPX.Open и т.д.

Ответ 1

Переименование объекта и имен столбцов внутри него состоит из двух этапов:

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 больше не существует, что означает, что вы действительно переименовали объект без создания промежуточных копий.