【问题标题】:How do I rename an R object?如何重命名 R 对象?
【发布时间】:2011-02-12 15:36:09
【问题描述】:

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

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

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

【问题讨论】:

    标签: r rename quantmod


    【解决方案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 &lt;- GSPC 时,您实际上并没有在内存中为SPY 分配新空间。 R 知道对象是相同的,并且只有在其中一个被修改时才会在内存中创建一个新副本(ie 当它们不再相同时,eg 当您更改下一行的列名)。所以通过这样做

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

    你永远不会真正复制GSPC,而只是给它一个新名称(SPY),然后告诉R忘记第一个名字(GSPC)。然后,当您更改列名时,您不需要创建 SPY 的新副本,因为 GSPC 不再存在,这意味着您已经真正重命名了对象而没有创建中间副本。

    【讨论】:

    • 这让我困惑了一段时间,所以我想添加关于懒惰评估的部分以澄清它。我对示例进行了内存和时间分析,以验证这实际上是 R 内部发生的情况。
    猜你喜欢
    • 2021-10-25
    • 2014-02-10
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多