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