2016-08-04 2 views
2

Рассмотрим следующие коды:R функция замены

#rm(list=ls()) 
x <- 1:5 
"[<-"(x, 2:3, value = 9:10)  
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 

I предположим, это какое-то странное поведение 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

Не удается подтвердить. Значение «x» в любом случае изменяется на «1 9 10 4 5» (R v3.3.1), независимо от того, запускаю ли я код в RStudio или в оболочке. Также не имеет значения, выполняются ли строки последовательно или сразу. – RHertel

+0

Да, x меняется на 1 9 10 4 5. Странно. –

Смежные вопросы