2016-08-04 96 views
2

考虑以下代码:ř替换功能

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

+5

我认为这是1 9 10 4 5任一方式。 – Frank

+2

你究竟是如何执行这些代码?我无法重现您的问题。 – MrFlick

+0

@Frank我在另一台计算机上再试一次,x会是1 2 3 4 5。我认为替换函数不应该直接调用。 –

回答

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的值完全不受影响。

请注意,如果您更改最后一行,则不会发生。例如。

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 
+0

感谢您的帮助。我也认为x不应该改变,因为没有重新分配。 R工作室可能会搞砸了。 –

+0

无法确认。在任何情况下(R v3.3.1),'x'的值都变为'1 9 10 4 5',无论是在RStudio还是在shell中运行代码。如果这些行按顺序执行或一次执行,也没有区别。 – RHertel

+0

是的,x变成1 9 10 4 5.奇怪。 –