Это помогает думать о <<-
как о эквиваленте assign
(если вы установите параметр inherits
в этой функции на TRUE
). Преимущество assign
в том, что он позволяет вам указать больше параметров (например, среду), поэтому в большинстве случаев я предпочитаю использовать assign
вместо <<-
.
Использование <<-
и assign(x, value, inherits=TRUE)
означает, что «окружающие среды предоставленной среды ищутся до тех пор, пока не встретится переменная 'x'». Другими словами, он будет продолжать просматривать среды по порядку, пока не найдет переменную с таким именем и не присвоит ее ей. Это может быть в рамках функции или в глобальной среде.
Чтобы понять, что делают эти функции, вам также необходимо разбираться в среде R (например, с использованием search
).
Я регулярно использую эти функции, когда запускаю большое моделирование и хочу сохранить промежуточные результаты. Это позволяет вам создавать объект вне области действия данной функции или apply
цикла. Это очень полезно, особенно если вас беспокоит неожиданное завершение большого цикла (например, отключение базы данных), и в этом случае вы можете потерять все в процессе. Это было бы эквивалентно записи результатов в базу данных или файл во время длительного процесса, за исключением того, что вместо этого результаты сохраняются в среде R.
Мое главное предупреждение: будьте осторожны, потому что теперь вы работаете с глобальными переменными, особенно при использовании <<-
. Это означает, что вы можете столкнуться с ситуациями, когда функция использует значение объекта из среды, когда вы ожидали, что она будет использовать значение, указанное в качестве параметра. Это одна из основных вещей, которых функциональное программирование пытается избежать (см. побочные эффекты strong>). Я избегаю этой проблемы, присваивая свои значения уникальным именам переменных (с использованием вставки с заданными или уникальными параметрами), которые никогда не используются в функции, а используются только для кеширования, и в случае, если мне нужно будет восстановить позже (или выполнить некоторые мета -анализ промежуточных результатов).
person
Shane
schedule
13.04.2010
<<-
, чтобы сохранить ключевые переменные, сгенерированные внутри функции, для записи в журналы отказов при сбое функции. Может помочь сделать сбой воспроизводимым, если функция использовала входные данные (например, из внешних API-интерфейсов), которые не обязательно были бы сохранены в противном случае из-за сбоя. - person geotheory   schedule 09.10.2020