Це допомагає мислити <<-
як еквівалент assign
(якщо ви встановите для цього inherits
параметра параметр TRUE
). Перевага в assign
тому , що вона дозволяє визначити інші параметри (наприклад, навколишнє середовище), тому я вважаю за краще використовувати assign
більш <<-
в більшості випадків.
Використання <<-
та assign(x, value, inherits=TRUE)
означає, що "оточуючі середовища, що надаються в середовищі, що надаються, здійснюються пошук, поки не зустрінеться змінна" x "." Іншими словами, він продовжуватиме проходити через оточення в порядку, поки не знайде змінну з цим ім'ям, і призначить її цьому. Це може бути в межах функції, або в глобальному середовищі.
Для того, щоб зрозуміти, що роблять ці функції, потрібно також зрозуміти R середовища (наприклад, використання search
).
Я регулярно використовую ці функції, коли запускаю велике моделювання, і хочу зберегти проміжні результати. Це дозволяє створити об'єкт поза межами заданої функції або apply
циклу. Це дуже корисно, особливо якщо ви турбуєтесь про те, що великий цикл несподівано закінчиться (наприклад, відключення бази даних), і в цьому випадку ви можете втратити все в процесі. Це було б рівнозначно запису ваших результатів у базу даних або файл під час тривалого запущеного процесу, за винятком того, що він замість цього зберігає результати в середовищі R.
Моє основне попередження з цього приводу: будьте обережні, оскільки зараз ви працюєте з глобальними змінними, особливо під час використання <<-
. Це означає, що ви можете опинитися в ситуаціях, коли функція використовує об'єктне значення з оточення, коли ви очікували, що воно буде використовувати те, яке було надано як параметр. Це одне з головних речей, яких функціональне програмування намагається уникати (див. Побічні ефекти ). Я уникаю цієї проблеми, присвоюючи свої значення унікальним іменам змінних (використовуючи пасту з набором або унікальні параметри), які ніколи не використовуються в межах функції, а просто використовуються для кешування, і якщо мені потрібно буде відновити пізніше (або зробити якийсь мета -аналіз на проміжні результати).