Подтвердить что ты не робот

Какой тип объекта представляет собой пакет R?

Вероятно, довольно простой вопрос, но мы с другом пытались запустить str(packge_name), а R - ошибка. Теперь, когда я смотрю на это, мне интересно, является ли R-пакет похожим на .zip файл, поскольку он представляет собой набор объектов, скажем картинки и песни, но не изображение или песню.

Если бы я попытался открыть почтовый индекс изображений с помощью средства просмотра изображений, он не знал бы, что делать, пока я не распакую его - так же, как я не могу позвонить str(forecast), но я могу позвонить str(ts) ve загрузил пакет прогноза в мою библиотеку...

Может ли кто-нибудь установить меня прямо?

4b9b3361

Ответ 1

Пакеты

R обычно распространяются как сжатые пакеты файлов. Они могут либо находиться в "двоичной" форме, которые предварительно обрабатываются в репозитории, чтобы скомпилировать любой источник C или Fortran и создать соответствующие заголовки, или они могут быть в исходной форме, где доступны различные требуемые файлы, которые будут использоваться в процессе установки, но это требует, чтобы у пользователей были необходимые компиляторы и инструменты, установленные в местах, где процесс сборки R с использованием системных ресурсов ОС может получить от них.

Если вы читаете документацию для пакета в CRAN, вы видите, что они распределены в наборе сжатых форматов, которые различаются в зависимости от целей ОС:

Package source:     Rcpp_0.11.3.tar.gz  # the Linus/UNIX targets
Windows binaries:   r-devel: Rcpp_0.11.3.zip, r-release: Rcpp_0.11.3.zip, r-oldrel: Rcpp_0.11.3.zip
OS X Snow Leopard binaries:     r-release: Rcpp_0.11.3.tgz, r-oldrel: Rcpp_0.11.3.tgz
OS X Mavericks binaries:    r-release: Rcpp_0.11.3.tgz
Old sources:    Rcpp archive   # not really a file but a web link

После установки пакета R будет иметь указанную структуру каталогов. Файл DESCRIPTION представляет собой текстовый файл с конкретными записями для компонентов, которые определяют, соответствует ли локальная установка зависимостям пакета. Существуют файлы NAMESPACE, LICENSE и INDEX. Существуют каталоги с именами '/help', '/html', '/Meta', '/R' и, возможно, '/libs', '/demo', '/data', '/unitTests' и другие.

Это дерево в верхней части каталога пакета ../library/Rcpp:

$ ls
CITATION    NAMESPACE   THANKS      examples    libs
DESCRIPTION NEWS.Rd     announce    help        prompt
INDEX       R       discovery   html        skeleton
Meta        README      doc     include     unitTests

Таким образом, в "жизненном цикле" пакета будет изначально серия требуемых и необязательных файлов, которые затем обрабатываются механизмами BUILD и CHECK в установленный пакет, которые затем сжимаются для распространения, а затем распаковывается в указанное дерево каталогов на компьютере пользователя. См. Страницы справки:

?.libPaths  # also describes .Library()
?package.skeleton
?install.packages
?INSTALL

И, конечно, прочитайте "Написание R Расширений", документ, который поставляется с каждой установкой R.

Ответ 2

Ваш вопрос:

Какой тип объекта представляет собой пакет R?

Как-то, я все еще не получаю ответа на этот точный вопрос. Итак, вот:

Что касается R, пакет R не является объектом. То есть, это не объект в системе типа R. R немного сложнее, потому что он позволяет вам писать

library(pkg_name)

Без необходимости определять pkg_name в любом месте. Напротив, другие объекты, которые вы используете в R, должны быть определены где-то - либо вами, либо каким-либо пакетом, который загружен либо явно, либо неявно.

Это печально и смущает людей. Поэтому, когда вы видите library(pkg_name), подумайте

library('pkg_name')

То есть, представьте себе имя пакета в кавычках. Это действительно работает так, как ожидалось. Тот факт, что код также работает без кавычек, является особенностью функции library, известной как нестандартная оценка. В этом случае это, в основном, неудачное дизайнерское решение (но есть причины).

Итак, чтобы повторить ответ: пакет не является типом объекта R 1. Для R это просто имя, которое относится к известному местоположению в файловой системе, подобно тому, что вы предполагали. BondedDusts отвечает подробно, чтобы объяснить эту структуру, поэтому я хочу повторить ее здесь.


1 Для получения более подробной технической информации см. комментарии Джошуаса и Ричардса ниже.

Ответ 3

Из R собственной документации:

Пакеты предоставляют механизм для загрузки дополнительного кода, данных и документация по мере необходимости.... Пакет - это каталог файлов, которые продлить R, исходный пакет (главные файлы пакета) или tarball, содержащий файлы исходного пакета, или установленный пакет, результат запуска R CMD INSTALL в исходном пакете. На некоторые платформы (особенно OS X и Windows) также имеют двоичные пакеты, zip файл или архив, содержащий файлы установленного пакет, который можно распаковать, а не устанавливать из источников. пакет не является библиотекой.

Итак, да, пакет не является его функциями; это механизм, чтобы R мог использовать функции или данные, которые составляют пакет. Таким образом, он должен быть загружен первым.

Ответ 4

Я читаю книгу Хэдли Advanced-R (глава 6.3 - функции, с .79), и эта цитата покроет вас, я думаю:

Every operation is a function call
"To understand computations in R, two slogans are helpful:

Everything that exists is an object.
Everything that happens is a function call."
— John Chambers

В соответствии с этим использование library(name_of_library) - это вызов функции, который будет загружать пакет. Каждый бит, который был загружен, то есть функции или наборы данных, objects, которые вы можете использовать, вызывая другие функции. В этом смысле пакет не a object в любой из R-сред до его загрузки. Тогда вы можете сказать, что это коллекция содержащего objects и которые загружаются.