Instalando un paquete fuera de línea desde GitHub
(5)
Así que finalmente he encontrado una solución que funciona en algunos casos ... pero es cierto que es un poco macgyvered. Me encantaría escuchar algunos comentarios sobre cómo hacer que este enfoque funcione para cualquier paquete.
Ya que tengo un paquete donde todo el código está en un archivo .R, falsifiqué un entorno de paquete para ese paquete y obtuve las funciones en ese entorno. Supongamos que el paquete está todo en test.R
:
#add an appropriately named package to the search() path
attach(environment(), name = "package:pkg")
#source the functions
sys.source("test.R", envir = as.environment("package:pkg"))
Voila No sé lo suficiente sobre cómo se cargan los paquetes para decir cómo hacerlo, por ejemplo, si el paquete tiene código src
en C o algo más.
Estoy tratando de transferir algunos paquetes a una instalación R en una computadora sin conexión (Windows).
Desde CRAN (digamos data.table
), el proceso: 1) descarga .zip en una computadora en línea separada 2) unidad de disco -> computadora fuera de línea 3) instalación a través de install.packages("....zip"...)
funciona exactamente como se esperaba.
Sin embargo, este proceso se rompió cuando intenté instalar desde GitHub.
Cuando ejecuto install.packages
(nota: estoy usando type="binary"
y repos=NULL
; type="win.binary"
tampoco hace nada) en el archivo zip (obtenido al ir a la página del paquete, por ejemplo, https://github.com/Rdatatable/data.table , y al usar la función "Descargar .zip"), algo sale mal.
No hay ningún mensaje de error (y no hay nada nuevo en la configuración de verbose=TRUE
), y la carpeta del paquete se agrega a mi biblioteca (es decir, puedo ver la carpeta llamada "data.table-master" cuando navego allí), pero la library(data.table)
produce el error: "no hay ningún paquete llamado data.table
". También noté que, mientras la instalación de CRAN termina con "paquete de data.table
desempaquetada satisfactoriamente y sumas MD5 verificadas", no recibo tal mensaje de un intento de instalación de GitHub.
¿Que está pasando aqui? Probé todos los prospectos posibles en ?install.packages
, pero dado que realmente no recibo un mensaje de error, ha sido difícil diagnosticar cuál es exactamente el problema.
Más fondo: la versión R es 3.2.0. Es difícil copiar y pegar la información de la sessionInfo
ya que esa computadora no está en línea, no estoy seguro de qué otra cosa puede ser relevante.
Actualizar:
Dados los comentarios de @ r2evans a continuación, también intenté usar type="source"
con install.packages
, y esto tampoco funcionó (el mismo problema, a pesar de tener la carpeta "data.table-master" en uno de mis .libPaths()
direcciones, library(data.table)
da el error de que no existe tal paquete).
Sin embargo, obtuve algo más de salida al usar verbose=TRUE
esta vez:
sistema (cmd0):
C:/PROGRA~1/R/R-32~1.0/bin/x64/R CMD INSTALL
1): tuvo éxito
''C:/PROGRA~1/R/R-32~1.0/bin/x64/R CMD INSTALL -l "C:/Users/Mike/Documents/R/win-library/3.2" "E:/data.table-master.zip"''
La siguiente función extrae un archivo .zip
GitHub ubicado en la path
a un directorio temporal e instala el paquete directamente desde allí, es decir, no crea un archivo .tar.gz
provisional. La función intenta adivinar el nombre del paquete, pero también se puede dar a través de pkg
. Los archivos temporales se eliminan al salir.
Esta función no instala ninguna dependencia.
install_zip <- function(path,
pkg = sub("(-[^-]+)?//.[^.]+$", "", basename(path))) {
dir1 <- tempfile()
dir2 <- file.path(dir1, pkg)
dir.create(dir2, recursive = TRUE)
on.exit(unlink(dir1, recursive = TRUE, force = TRUE))
suppressMessages(unzip(path, exdir = dir2,
unzip = getOption("unzip")))
temp_contents <- dir(dir2)
if (length(temp_contents) == 1L) {
dir3 <- file.path(dir2, temp_contents)
if (file.info(dir3, extra_cols=FALSE)[["isdir"]]) {
dir2 <- file.path(dir2, pkg)
file.rename(dir3, dir2)
}
}
install.packages(dir2, repos = NULL, type = "source")
}
No estoy seguro si esto es una solución o una solución. Dado un archivo zip de la fuente de una estructura de directorios del paquete R:
En una concha:
~$ unzip data.table-master.zip
## optional renaming
~$ mv data.table-master data.table
## create the new
~$ tar czf data.table.tar.gz data.table
Probablemente hay otras herramientas que le permiten extraerlas y volver a archivarlas en un formato diferente. Como tiendo a tener acceso y control a nivel de shell, tiendo a usar estas herramientas simples.
En R:
install.packages("data.table.tar.gz", type="source", repos=NULL)
(Esto no tendrá éxito a menos que todas las dependencias ya estén instaladas).
Puede usar install_local
desde devtools
para instalar un paquete Github con el zip que ha descargado, por ejemplo:
library("devtools")
install_local(path = "data.table-master.zip")
Pero primero deberás instalar todas las dependencias.
Supongamos que tienes Rtools y devtools en la máquina de ganar.
Paso 1: Descarga la fuente zip.
Paso 2: Copie a la máquina de ganar y descomprima el contenido allí.
Paso 3: Ejecute el siguiente código (ajuste la ruta según sea necesario):
library(devtools)
source <- devtools:::source_pkg("E:/temp/data.table-master")
install(source)
library(data.table)
#loads 1.9.7