请考虑以下代码:
#rm(list=ls())
x <- 1:5
"[<-"(x, 2:3, value = 9:10)
x
如果我同时执行所有四行,那么x将是1 9 10 4 5.如果我逐个执行代码,那么最后,x将是1 2 3 4 5.什么是原因?
答案 0 :(得分:1)
如果你执行
x <- 1:5
"[<-"(x, 2:3, value = 9:10)
您将看到替换产生的输出:
1 9 10 4 5
但是,原始值x
不会受到影响(您不会覆盖它)
因此,如果您执行x
,您将看到其原始值:
1 2 3 4 5
如果我同时运行所有线路(我猜你正在使用RStudio),我会看到这一点(我想这就是你要求的原因)
execute> x <- 1:5
execute> "[<-"(x, 2:3, value = 9:10)
[1] 1 9 10 4 5
execute> x
[1] 1 9 10 4 5
我猜这是一种奇怪的RStudio行为(可能类似于this one),但x
的值根本不受影响。
请注意,如果更改最后一行,则不会发生这种情况。 E.g。
x <- 1:5
"[<-"(x, 2:3, value = 9:10)
x <- 6:10
execute> x <- 1:5
execute> "[<-"(x, 2:3, value = 9:10)
[1] 1 9 10 4 5
execute> x <- 6:10
execute>
EDITED
使用R版本3.3.1和RStudio版本0.99.467运行。
运行这三行会将x
的值更改为1 9 10 4 5
。但是,运行第一行,然后运行第二行和第三行,显示正确的结果(并且x
的值不受影响)
execute> x <- 1:5
execute> "[<-"(x, 2:3, value = 9:10)
[1] 1 9 10 4 5
execute> x
[1] 1 2 3 4 5