R替换功能

时间:2016-08-04 14:08:06

标签: r

请考虑以下代码:

#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.什么是原因?

1 个答案:

答案 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