В чем разница между library () / require () и source () в r? - PullRequest
0 голосов
/ 12 марта 2019

Огляделся и до сих пор не уверен, в чем разница между library() / require() и source() в r? Согласно этому вопросу SO: В чем разница между require () и library ()? похоже, что library() и require() - это одно и то же, возможно, один из них унаследован. source() для ленивых разработчиков, которые не хотят создавать библиотеку? Когда вы используете каждую из этих конструкций?

Ответы [ 2 ]

4 голосов
/ 12 марта 2019

Различия между library и require уже хорошо документированы в В чем разница между require () и library ()? .

Итак, я сосредоточусь начем source отличается от этих.На самом деле это принципиально разные команды.Ни library, ни require фактически не выполняют никакого кода.Они просто прикрепляют пространство имен ленивым образом, что означает, что отдельные функции в пакете не запускаются, если они на самом деле не вызываются позже.Source, с другой стороны, делает что-то совершенно иное: выполнение всего кода в файле в это время.

Небольшое предостережение: packages можно сделатьфактически запускать некоторый код во время загрузки или присоединения пакета через функции .onLoad и .onAttach.Посмотрите здесь: https://stat.ethz.ch/R-manual/R-devel/library/base/html/ns-hooks.html

1 голос
/ 12 марта 2019

source запускает код в файле .R, строка за строкой.

library и require загружают и присоединяют пакеты R.

source() для ленивых разработчиков, которые не хотят создавать библиотеку?

Вы правы, что source для случаев, когда у вас нет пакета. Лень - не единственная причина, иногда пакеты не подходят - пакеты предоставляют функциональные возможности, но не делают . Возможно, у меня есть сценарий, который извлекает данные из базы данных, соответствует модели и делает некоторые прогнозы. Пакет может предоставлять функции, помогающие мне сделать это, но на самом деле он этого не делает. Сценарий, сохраненный в файле .R и запущенный с source(), может выполнить команды и выполнить задачу.


Я хочу решить это:

похоже, library() и require() - это одно и то же, может быть, один унаследован.

Они оба делают одно и то же (загружают и прикрепляют пакет). Основное отличие состоит в том, что library() выдаст ошибку и остановит скрипт, если пакет недоступен, тогда как require() вернет TRUE или FALSE в зависимости от его успешности. По общему мнению, library лучше, так что ваш сценарий останавливается с приятной явной ошибкой, и вы можете установить отсутствующий пакет, прежде чем продолжить. Связанный вопрос имеет более тщательное обсуждение, которое я не буду пытаться повторить здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...