Какой тип объекта представляет собой пакет R?
Вероятно, довольно простой вопрос, но мы с другом пытались запустить str(packge_name)
, а R - ошибка. Теперь, когда я смотрю на это, мне интересно, является ли R-пакет похожим на .zip файл, поскольку он представляет собой набор объектов, скажем картинки и песни, но не изображение или песню.
Если бы я попытался открыть почтовый индекс изображений с помощью средства просмотра изображений, он не знал бы, что делать, пока я не распакую его - так же, как я не могу позвонить str(forecast)
, но я могу позвонить str(ts)
ve загрузил пакет прогноза в мою библиотеку...
Может ли кто-нибудь установить меня прямо?
Ответы
Ответ 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
и которые загружаются.