Справочный файл R для `<<-` на самом деле правильный?

Я пытаюсь объяснить объем и отладку презентации для R. Я читал файл справки для <<- и увидел, что это говорит об этом

  

Операторы <<- и ->> обычно используются только в функциях, и   сделать поиск в родительской среде для существующего   определение назначаемой переменной. Если такая переменная найдена   (и его привязка не заблокирована), тогда его значение переопределяется, в противном случае   назначение происходит в глобальной среде.

Но я не думаю, что это вполне описывает то, что делает <<-. Вот функция:

do.func <- function() {
  x <- 1
  {
    x<<-0
  }
  print(x)
}

do.func()
x

производит этот вывод:

>     do.func()
[1] 1
>     x
[1] 0

Похоже, что <<- идет прямо в глобальную среду. Это правильно?

4 голоса | спросил AdamO 16 MarpmFri, 16 Mar 2018 20:16:35 +03002018-03-16T20:16:35+03:0008 2018, 20:16:35

1 ответ


0

Вот одна попытка прояснить ситуацию.

Функция может быть переписана следующим образом:

do.func <- function() {
  `<-`(x, 1)
  `{`(x <<- 0)
  print(x)
}

Если его так прописать (только вызовы функций), становится ясно, что происходит. В частности, часть внутри блока { состоит из двух функций:

`{` (`<<-`(x, 0) )

Функция внутри:

`<<-`(variable, value)

Назначает значение переменной и возвращает невидимо. Например:

> ( `<<-`(x, 2) )
[1] 2

Поэтому - он оценивается в той же среде, где находится х (в вашем примере). Итак, что происходит в этом блоке:

{
  x<<-0
}  

Первый x перезаписывается, и только после этого значение x передается в функцию {, которая просто возвращает последнее выражение.

Смотрите также:

help(`{`)
ответил Karolis Koncevičius 16 MarpmFri, 16 Mar 2018 20:36:42 +03002018-03-16T20:36:42+03:0008 2018, 20:36:42

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132