我偶然遇到了 "[<-"
运算符的奇怪行为。它的行为取决于调用的顺序以及我是在使用 RStudio 还是普通的 RGui。以下是一个例子来说明清楚。
x <- 1:10
"[<-"(x, 1, 111)
x[5] <- 123
据我所知,第一个分配应该不会改变
x
(或者我错了?),而第二个分配应该会改变x
。实际上,上述操作的结果是:x
[1] 1 2 3 4 123 6 7 8 9 10
然而,当我们以不同的顺序执行这些操作时,结果是不同的,并且
x
已经改变了!具体地说:x <- 1:10
x[5] <- 123
"[<-"(x, 1, 111)
x
[1] 111 2 3 4 123 6 7 8 9 10
但这只发生在我使用纯 R 时!在 RStudio 中,两种选项的行为都是相同的。我已经在两台机器上检查过了(一台是 Fedora,一台是 Win7),情况看起来完全一样。我知道“函数式”版本(
"[<-"(x..)
)可能永远不会被使用,但我非常好奇为什么会发生这种情况。是否有人能解释一下?==========================
编辑: 好吧,从评论中我知道原因是
x <- 1:10
的类型是 'integer',并且在替换 x[5] <- 123
后变成了 'double'。
但仍然存在一个问题,为什么在 RStudio 中的行为不同?我重新启动 R 会话,但它没有改变任何东西。
named
字段为2
的方式“触摸”x
,直到子分配发生之后。 您(或拥有Rstudio的其他人)可以通过一次性或逐个粘贴x <- 1:10; .Internal(inspect(x))
来测试此功能。 在第一种情况下,我希望看到[MARK,NAM(1)]
,在第二种情况下,我希望看到[MARK,NAM(2)]
。 如果是这样,我认为谜团基本上已经解决了。 - Josh O'Brien