Search code examples
rstringrstringirenv

R install package stringi in renv


I am trying to install the package stringi with renv::install().

Normally, I would use

install.packages('stringi', configure.vars='ICUDT_DIR=path/to/icudt61l.zip/')

To specify the location of icudt61l.zip dependency. How can I do this in renv ?

I tried to add ICUDT_DIR='path/to/icudt61l.zip/' in my .Rprofile but it didn't work.

Any idea how to tell renv where is ICU to install stringi ?

Here is the error I get

> renv::install("stringi")
...
Installing stringi [1.6.2] ...
    FAILED
Error installing package 'stringi':
===================================
...
** package ‘stringi’ successfully unpacked and MD5 sums checked
** using staged installation
checking for R_HOME... /opt/R/4.0.3/lib/R
checking for R... /opt/R/4.0.3/lib/R/bin/R
...
checking with pkg-config for the system ICU4C... 50.1.2
checking for ICU4C >= 55... no
*** ICU4C 50.1.2 has been detected
*** Minimal requirements, i.e., ICU4C >= 55, are not met
*** Trying with 'standard' fallback flags
checking whether an ICU4C-based project can be built... yes
checking programmatically for sufficient U_ICU_VERSION_MAJOR_NUM... no
*** This version of ICU4C cannot be used.
*** Using the ICU 69 bundle.
checking whether we may compile src/icu69/common/putil.cpp... yes
checking whether we may compile src/icu69/i18n/number_affixutils.cpp... yes
checking whether alignof(std::max_align_t) is available... no
checking whether alignof(::max_align_t) is available... yes
checking whether the ICU data library can be downloaded... downloading the ICU data library (icudt)
output path: icu69/data/icu4c-69_1-data-bin-l.zip
trying URL 'https://raw.githubusercontent.com/gagolews/stringi/master/src/icu69/data/icu4c-69_1-data-bin-l.zip'
Error in download.file(paste(href, fname, sep = ""), icudtzipfname, mode = "wb"): cannot open URL 'https://raw.githubusercontent.com/gagolews/stringi/master/src/icu69/data/icu4c-69_1-data-bin-l.zip'

trying URL 'http://raw.githubusercontent.com/gagolews/stringi/master/src/icu69/data/icu4c-69_1-data-bin-l.zip'
Error in download.file(paste(href, fname, sep = ""), icudtzipfname, mode = "wb"): cannot open URL 'http://raw.githubusercontent.com/gagolews/stringi/master/src/icu69/data/icu4c-69_1-data-bin-l.zip'

icudt download failed
Error: Stopping on error
In addition: Warning messages:
1: In download.file(paste(href, fname, sep = ""), icudtzipfname, mode = "wb") :
  URL 'https://raw.githubusercontent.com/gagolews/stringi/master/src/icu69/data/icu4c-69_1-data-bin-l.zip': status was 'Couldn't connect to server'
2: In download.file(paste(href, fname, sep = ""), icudtzipfname, mode = "wb") :
  URL 'http://raw.githubusercontent.com/gagolews/stringi/master/src/icu69/data/icu4c-69_1-data-bin-l.zip': status was 'Couldn't connect to server'
Execution halted
*** *********************************************************************
*** stringi cannot be built.
*** Failed to download the ICU data library (icudt). Stopping now.
*** For build environments that have no internet access,
*** see the INSTALL file for a workaround.
*** *********************************************************************
ERROR: configuration failed for package ‘stringi’
* removing ‘/var/projects/iml/GDCFA21N/avertie_test/renv/staging/2/stringi’
Error: install of package 'stringi' failed [error code 1]

Solution

  • From ?renv::install:

    Package Configuration:
    
         Many R packages have a 'configure' script that needs to be run to
         prepare the package for installation. Arguments and environment
         variables can be passed through to those scripts in a manner
         similar to install.packages. In particular, the R options
         'configure.args' and 'configure.vars' can be used to map package
         names to their appropriate configuration. For example:
    
         # installation of RNetCDF may require us to set include paths for netcdf
         configure.args = c(RNetCDF = "--with-netcdf-include=/usr/include/udunits2"))
         options(configure.args = configure.args)
         renv::install("RNetCDF")
    
         Similarly, additional flags that should be passed to R CMD INSTALL
         can be set via the 'install.opts' R option:
    
         # installation of R packages using the Windows Subsystem for Linux
         # may require the `--no-lock` flag to be set during install
         options(install.opts = "--no-lock")
         renv::install("xml2")
    

    Setting something like:

    options(configure.vars = list(stringi = "ICUDT_DIR=path/to/icudt61l.zip"))
    

    should hopefully get you unstuck.