studio - ¿Qué tipo de objeto es un paquete R?
plot en r (4)
Probablemente sea una pregunta bastante básica, pero un amigo y yo intentamos ejecutar str(packge_name)
y R nos lanzó un error. Ahora que lo estoy viendo, me pregunto si un paquete R es como un archivo .zip, ya que es una colección de objetos, digamos imágenes y canciones, pero no una imagen o una canción en sí.
Si intentara abrir un archivo zip de imágenes con un visor de imágenes, no sabría qué hacer hasta que lo descomprimiera, como no puedo llamar a str(forecast)
pero puedo llamar a str(ts)
una vez que haya cargado el paquete de pronóstico en mi biblioteca ...
¿Alguien puede aclararme?
De la propia documentación de R :
Los paquetes proporcionan un mecanismo para cargar código opcional, datos y documentación según sea necesario ... Un paquete es un directorio de archivos que se extienden R, un paquete fuente (los archivos maestros de un paquete) o un archivo comprimido que contiene los archivos de un paquete fuente. o un paquete instalado, el resultado de ejecutar R CMD INSTALL en un paquete fuente. En algunas plataformas (especialmente OS X y Windows) también hay paquetes binarios, un archivo zip o tarball que contiene los archivos de un paquete instalado que se pueden descomprimir en lugar de instalar desde fuentes. Un paquete no es una biblioteca.
Entonces sí, un paquete no es las funciones dentro de él; es un mecanismo para que R pueda utilizar las funciones o los datos que conforman el paquete. Por lo tanto, necesita ser cargado primero.
Estoy leyendo el libro Advanced-R Hadley (Capítulo 6.3 - funciones, pág. 79) y esta cita lo cubrirá, creo:
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
De acuerdo con eso, usar library(name_of_library)
es una llamada a la función que cargará el paquete. Cada bit que se ha cargado, es decir, las funciones o los conjuntos de datos son objects
que puede utilizar llamando a otras funciones. En ese sentido, un paquete no es un object
en ninguno de los entornos de R hasta que se carga. Entonces puedes decir que es una colección de los objects
que contiene y que están cargados.
Los paquetes R generalmente se distribuyen como paquetes comprimidos de archivos. Pueden estar en forma "binaria" preprocesada en un repositorio para compilar cualquier fuente de C o Fortran y crear los encabezados adecuados, o pueden estar en forma de fuente donde los diversos archivos necesarios están disponibles para ser utilizados en el proceso de instalación, pero esto requiere que los usuarios tengan los compiladores y herramientas necesarios instalados en las ubicaciones donde el proceso de compilación R que utiliza los recursos del sistema operativo puede obtenerlos.
Si lee la documentación de un paquete en CRAN, verá que se distribuyen en un conjunto de formatos comprimidos que varían según los objetivos del sistema operativo:
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
Una vez instalado, un paquete R tendrá una estructura de directorio específica. El archivo de DESCRIPCIÓN es un archivo de texto con entradas específicas para los componentes que determinan si la instalación local cumple con las dependencias del paquete. Hay archivos NAMESPACE, LICENSE e INDEX. Hay directorios llamados ''/ help'', ''/ html'', ''/ Meta'', ''/ R'', y posiblemente ''/ libs'', ''/ demo'', ''/ data'', ''/ unitTests'', y otros.
Este es el árbol en la parte superior del directorio del paquete ../library/Rcpp
:
$ ls
CITATION NAMESPACE THANKS examples libs
DESCRIPTION NEWS.Rd announce help prompt
INDEX R discovery html skeleton
Meta README doc include unitTests
Por lo tanto, en el "ciclo de vida" de un paquete, inicialmente habrá una serie de archivos obligatorios y opcionales, que luego serán procesados por los mecanismos BUILD y CHECK en un paquete instalado, que luego se comprime para su distribución y luego se desempaqueta. en un árbol de directorio especificado en la máquina de los usuarios. Vea estas páginas de ayuda:
?.libPaths # also describes .Library()
?package.skeleton
?install.packages
?INSTALL
Y, por supuesto, lea Writing R Extensions, un documento que se envía con cada instalación de R.
Tu pregunta es:
¿Qué tipo de objeto es un paquete R?
De alguna manera, todavía me falta una respuesta a esta pregunta exacta. Así que aquí va:
En lo que respecta a R, un paquete R no es un objeto. Es decir, no es un objeto en el sistema de tipo de R. R es ser un poco difícil, porque te permite escribir
library(pkg_name)
Sin necesidad de definir pkg_name
ningún lugar antes. En contraste, otros objetos que está utilizando en R deben definirse en algún lugar, ya sea por usted o por algún paquete que se cargue de manera explícita o implícita.
Esto es desafortunado, y confunde a la gente. Por lo tanto, cuando vea la library(pkg_name)
, piense
library(''pkg_name'')
Es decir, imagine el nombre del paquete entre comillas. De hecho, esto funciona como se esperaba. El hecho de que el código también funcione sin comillas es una peculiaridad de la función de library
, conocida como evaluación no estándar . En este caso, es principalmente una decisión de diseño desafortunada (pero hay razones).
Entonces, para repetir la respuesta: un paquete no es un tipo de objeto R 1 . Para R, es simplemente un nombre que se refiere a una ubicación conocida en el sistema de archivos, similar a lo que has asumido. La respuesta de BondedDust entra en detalles para explicar esa estructura, así que no la repetiré aquí.
1 Para detalles súper técnicos, vea los comentarios de Joshua y Richard a continuación.