2016-08-04 178 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.奇怪。 –