Как переименовать объект R? - PullRequest
20 голосов
/ 27 апреля 2010

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

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

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

1 Ответ

33 голосов
/ 27 апреля 2010

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

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

...