【问题标题】:Replacement functions in RR中的替换函数
【发布时间】:2018-07-02 14:54:37
【问题描述】:

我在他的书网站上阅读了 Hadley Wickham 的 Advanced R。我在R中发现了一个关于替换函数的问题。下面的结果是根据他的书给出的。

library(pryr)
x <- 1:10
address(x)
#> [1] "0x103945110"

x[2] <- 7L
address(x)
#> [1] "0x103945110"

他认为如果我们只替换 x 的第二个元素,x 的地址就不会改变。但是,当我这样做时, x 的物理地址实际上发生了变化。那么,有人告诉我为什么吗?

【问题讨论】:

  • 你运行了那个确切的代码吗?
  • 请注意,如果您使用 7 而不是 7L,那是对代码的更改。
  • 我可以复制这个问题。我得到地址更改,在 macOS Sierra 上运行 64 位 R 3.4.0,pryr 版本 0.1.3。
  • 这里也是,x86_64-w64-mingw32,R 3.5.0,pryr 0.1.4,在这里找到源:adv-r.had.co.nz/Functions.html#replacement-functions
  • 您是在 Rstudio 中运行还是在基本的 R GUI 中运行?如果是这样,Rstudio 会引用变量。可能重复:stackoverflow.com/questions/48230311/…

标签: r


【解决方案1】:

有一个change in how R 3.5 stores values in the form a:b。如果您尝试使用相同的示例

library(pryr)
x <- c(1,2,3,4,5,6,7,8,9,10)
address(x)
x[2] <- 7L
address(x)

您应该得到相同的地址。现在1:10 没有完全展开,直到它必须展开。并且更改向量内的元素将导致它扩展。

【讨论】:

    猜你喜欢
    • 2014-08-17
    • 2011-02-17
    • 2012-07-18
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 2021-11-26
    • 2020-05-20
    • 2014-10-15
    相关资源
    最近更新 更多