2016-07-06 9 views
0

Я только что узнал в классе, что R использует лексическую область обзора и тестировал его в R Studio на моем компьютере, и я получил результаты, которые соответствуют динамическому охвату, а не лексическим? Разве это не должно произойти в R? Я побежал:Почему мой R работает в динамическом режиме? Разве это не должно быть лексическим?

y <- 10 
f <- function(x) { 
    y <- 2 
    y^3 
} 
f(3) 

И е (3) вышел быть 4 (2^3) не 100 (10^3), хотя мой класс представил этот слайд: http://puu.sh/pStxA/0545079dbe.png. Разве это не динамическое исследование? Я могу просто смотреть на это неправильно, но есть ли режим в меню где-нибудь, где вы можете переключить область обзора на лексику или что происходит?

+4

Вы должны работать на форматирование вопрос и делает его внутренне непротиворечивым. (Вы используете кубик в своем примере кода и sqaured в своем параграфе.) Кроме того, вы можете использовать RStudio в качестве редактора кода, но этот вопрос касается R, а не RStudio. Вы не пометили бы английский грамматический вопрос «Word» только потому, что используете MS Word в качестве своего редактора. – Gregor

+0

2^3 - 4 ??? 10^3 составляет 100 мкМ К счастью для моего здравомыслия R тоже не думает. –

ответ

0

Ваш код назначил y внутри самой функции, которая просматривается перед y в глобальной среде.

Из этой замечательной статьи (http://www.r-bloggers.com/environments-in-r/): «Когда функция оценивается, R смотрит в ряд сред для любых переменных в области. Сначала среда оценки, а затем окружающая среда функции, которая будет глобальной средой для функций, определенных в рабочей области. "

В простом языке, специфичном для вашего случая: когда вы вызываете переменную «y», R ищет «y» в среде функции, и если она не находит ее, она переходит в ваше рабочее пространство. Пример для иллюстрации:

y <- 10 

f <- function(x) { 
    y^3 
} 

f(3) 

будет производить вывод:

> f(3) 
[1] 1000 
+0

Также обратите внимание, что определение y в функции не достигает глобальной области действия, если вы не используете оператор '<< -' вместо '<-' – Adam

+0

Хорошо. Так что я тоже думал об этом, но мой урок имеет этот слайд: http://puu.sh/pStxA/0545079dbe.png Это неправильно? – Bethie

+0

Цитируя этот источник (https://github.com/jtleek/modules/blob/master/02_RProgramming/Scoping/index.md): «Лексическая область видимости в R означает, что Значения FREE (курсив мой) переменных выполняются в среде, в которой была определена функция ». В вашем случае y не является свободной переменной, потому что вы назначили y <- 2 внутри среды функции. – Anton