27

我正在使用 quantmod 包从 Yahoo 导入金融系列数据。

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

我想将对象“GSPC”的名称更改为“SPX”。我已经尝试过 reshape 包中的 rename 函数,但它只会更改变量名。“GSPC”对象具有向量 GSPC.Open、GSPC.High 等。我希望将“GSPC”重命名为“SPX”以将 GSPC.Open 更改为 SPX.Open 等等。

4

1 回答 1

43

重命名对象和其中的列名是一个两步过程:

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不再存在,这意味着您已经真正重命名了对象而没有创建中间副本。

于 2010-04-27T00:04:41.593 回答