Com emprar renv (i no morir en l'intent) | |
Aquesta pàgina "renv" vol documentar l'ús del paquet Es pot accedir a aquesta documentació a la url:
|
1. Introducció | |
Derivat de: https://blog.rstudio.com/2019/11/06/renv-project-environments-for-r/ Potser No sempre cal?
A pensar en cada cas, potser... Instal.lar si cal
Primer de tot, cal instal.lar el paquet si no el tenim encara:
install.packages("renv")
Obrir Projecte en RStudio
Llavors podem obrir ja un projecte de codi R en RStudio, en el que encara no haguem demanat a Cal que ens assegurem que estem treballant amb un projecte de RStudio i no pas dins l'entorn global obrint arxius a ma, per tal que funcioni tant Si no tenim el codi dins un projecte de RStudio, cal crear un projecte nou a partir de la carpeta de l'ordinador on tenim el codi en qüestió. |
1.1. Inici | |
En general es comença amb alguna d'aquestes dues instruccions, per fer fa la màgia inicial i seguir els passos que s'indiquen llavors per la consola d'R
xxxxxxxxxx renv::status()
xxxxxxxxxx renv::init() # si es vol forçar la inicialització
Ja podem treballar amb normalitat. |
1.2. Controlem arxius nous via git | |
|
1.3. En re-obrir el projecte d'RStudio... | |
En obrir de nou quan calgui el projecte d'RStudio, hem de veure que a la consola una de les darreres línies que es mostren indica que s'ha carregat el projecte de Exemple de la consola d'R en obrir el projecte fictici "454_foo" dins la carpeta code de l'usuari:
x R version 3.6.3 (2020-02-29) -- "Holding the Windsock" Copyright (C) 2020 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) (...) Type 'q()' to quit R. Loading required package: drat * Project '~/code/454_foo' loaded. [renv 0.13.0] [Workspace loaded from ~/code/454_foo/.RData] > Ja podem treballar amb normalitat. Cal tenir present que els paquets que instal.lem a partir de llavors, seran instal.lats dins la subcarpeta ./renv del nostre projecte d'R. |
2. Afegir paquets nous | |
Primer afegim el paquet
xxxxxxxxxx install.packages("devtools")
xxxxxxxxxx install.packages("paquetnou") # Així per a que se'ns instal.li la darrera versió disponible en el repositori, o bé renv::install("paquetnou@1.0.1") # :: D'aquesta altra forma per a que s'instal.li una versió concreta
xxxxxxxxxx renv::snapshot()
|
3. Restaurar paquets antics | |
Ho podem fer amb:
xxxxxxxxxx renv::restore()
|
4. Moure app a un servidor web com els shiny de CityOS | |
xxxxxxxxxx > renv::isolate() * Copying packages into the private library ... [103/103] Done! * This project has been isolated from the cache. >
Més informació: [+]
Cal tenir en compte que, en el cas d'emprar "RStudio connect" per posar l'app a un servidor com shinyapps.io o equivalent, cal no posar l'arxiu .Rprofile de dins del projecte amb renv al servidor web, segons la documentació d'aquell cas d'ús concret amb Rstudio connect:
|
5. Desactivar renv si cal | |
Podria passar (com hem vist amb l'app d'historic d'eleccions) que una aplicació temporalment no funciona bé (per alguna dependència extranya no resolta) quan volem emprar
xxxxxxxxxx renv::deactivate() # renv::activate() # O això si el volem tornar a activar en un altre moment
|
6. Retocs a una màquina per deixar l'aplicació R operativa inicialment amb renv i git | |
Instal.lar paquets de sistema a ma
Per exemple, en CityOS Producció, vam haver d'instalar a mà els següents paquets de sistema: (per a centos)
xxxxxxxxxx 2 1 sudo yum install libgit2-devel 2 sudo yum install libssh2 # libssh2 de sistema ha de ser la versió 1.70 o superior, i per omissió a PRE i PRO hi havia la versió 1.4.x. Actualitzem la llibreria libssh2 des dels repositoris per omissió de CentOS
|
6.1. instal.lar versions de paquets de R des de repositoris | |
Quan la versió més recent ja va bé:
xxxxxxxxxx 1 1 install.packages("later")
xxxxxxxxxx 5 1 devtools::install_version("XML", version="3.98-1.20") 2 devtools::install_version("odbc", version="1.2.1") 3 devtools::install_version("pkgload", version="1.0.2") # A PRO havia fallat la instal.lació del pkgload, i hem hagut d'instal.lar la 1.0.2 4 # si falla per que no hi ha devtools instal.lat, es pot forçar a 5 install.packages("pkgload", version="1.0.2")
|
6.2. Posada a punt dels entorns de treball amb renv | |
En PRO, hem hagut de fer un |
6.2.1. Canviar a renv.lock una versió d'un paquet d'R concret | |
Un cop confirmat que ja et va el projecte, amb el paquet d'R concret que sigui en una versió diferent del que s'especificava a l'
xxxxxxxxxx renv::record("ggplot2@1.1.0")
|
6.2.2. Restaurar al projecte un paquet concret a la versió indicada a l'renv.lock | |
Per restaurar un paquet concret només (per exemple, ggplot2) a la versió que hi està indicada al
xxxxxxxxxx renv::restore(packages = "ggplot2")
|
6.3. Afegir una versió concreta d'un sol paquet paquet concret a renv.lock | |
Ho pots fer amb comandes de l'estil:
xxxxxxxxxx renv::record("renv@0.13.1")
|
6.4. R en Windows dins de projectes amb renv actiu darrera firewall proxy o VPN | |
Sembla que en les màquines coporatives amb Windows 10 a l'oficina en que es treballa darrera un firewall (i.e. sense emprar Global Protect), o quan es treballa des de casa amb VPN (i firewall + proxy, etc), quan s'activa el paquet La sol.lució trobada en el context de teletreball i GlobalProtect (posant la informació del proxy a un arxiu Cal instal.lar primer unes eines genèriques a l'R (fora dels projectes amb renv):
xxxxxxxxxx renv::equip() # això t'hauria d'instal.lar curl entre altres paquets d'R i llibreries externes # install.packages("curl", type="binary") # si l'anterior falla
El problema ve associat amb que renv empar per omissió una forma diferent de sortir a internet que la forma que empra l'R. I la solució està en emprar una versió de
xxxxxxxxxx > renv:::renv_download_method() [1] "libcurl" >
xxxxxxxxxx > getOption("download.file.method") [1] "wininet" >
xxxxxxxxxx > renv:::renv_download_method() Error in get(name, envir = asNamespace(pkg), inherits = FALSE) : object 'renv_download_method' not found >
xxxxxxxxxx install.packages("renv")
xxxxxxxxxx renv::install("renv@0.15.2")
xxxxxxxxxx renv::install("renv@0.13.1") Sys.setenv(RENV_DOWNLOAD_FILE_METHOD = getOption("download.file.method"))
xxxxxxxxxx renv::restore()
xxxxxxxxxx renv::record("renv@0.13.1")
xxxxxxxxxx renv::restore(packages = "renv")
|
7. Més informació | |
Veure:
|