Search code examples
rgithubdevtoolsr-package

R packge install from GitHub - "'' does not exist in current working directory


I have built a new package, and it is hosted on GitHub at github.com/kevinwolz/hisafer.

I am trying to install the package via devtools::install_github(), but I am getting aweird error. Help?

>install_github("kevinwolz/hisafer")

Downloading GitHub repo kevinwolz/hisafer@master
from URL https://api.github.com/repos/kevinwolz/hisafer/zipball/master
Installing hisafer

[Here, the 5 package dependencies (dplyr, tidyr, purrr, ggplot2, lubridate) are automatically installed successfully, but I have left text out]

"C:/Users/wolzkevi/DOCUME~1/R/R-34~1.3/bin/x64/R" --no-site-file --no-environ --no-save  \
  --no-restore --quiet CMD INSTALL  \
  "C:/Users/wolzkevi/AppData/Local/Temp/Rtmpg5OyD6/devtools28843ed4c0a/kevinwolz-hisafer-bf69883"  \
  --library="C:/Users/wolzkevi/Documents/R/R-3.4.3/library" --install-tests 

* installing *source* package 'hisafer' ...
** R
** inst
** preparing package for lazy loading
Error : '' does not exist in current working directory ('C:/Users/wolzkevi/AppData/Local/Temp/Rtmpg5OyD6/devtools28843ed4c0a/kevinwolz-hisafer-bf69883').
Error : unable to load R code in package 'hisafer'
ERROR: lazy loading failed for package 'hisafer'
* removing 'C:/Users/wolzkevi/Documents/R/R-3.4.3/library/hisafer'
In R CMD INSTALL
Installation failed: Command failed (1)

It seems that the critical error here is "Error : '' does not exist in current working directory". Does anyone know why this might be happening? Is there something about the way my package is built/setup that is causing issues? I can install the package from source just fine when not downloading from GitHub, so that leads me to believe that something weird is happening in the GitHub process.

SESSION INFO:

R version 3.4.3 (2017-11-30)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

Matrix products: default

locale:
[1] LC_COLLATE=French_France.1252  LC_CTYPE=French_France.1252   
[3] LC_MONETARY=French_France.1252 LC_NUMERIC=C                  
[5] LC_TIME=French_France.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] devtools_1.13.4

loaded via a namespace (and not attached):
 [1] httr_1.3.1     compiler_3.4.3 R6_2.2.2       tools_3.4.3    withr_2.1.1    curl_3.1      
 [7] memoise_1.1.0  knitr_1.19     git2r_0.21.0   digest_0.6.15 

Solution

  • The problem is that in R/utils.R, you try to read files from inst/extdata that do not exist (this is from lines 36 and 37):

    INPUT.DEFS  <- readr::read_delim(system.file("extdata", "input_defs.txt",  package = "hisafer"), "\t", col_types = readr::cols())
    OUTPUT.DEFS <- dplyr::arrange(readr::read_delim(system.file("extdata", "output_defs.txt", package = "hisafer"), "\t", col_types = readr::cols()), profile, name)
    

    Inspection of inst/extdata will show you neither input_defs.txt nor output_defs.txt are there.

    How did I figure that out?

    I ran

    devtools::load_all("hisafer/")
    

    which also gives the error

    Error: '' does not exist in current working directory

    but allows you to show an informative traceback:

    13.stop("'", path, "' does not exist", if (!is_absolute_path(path)) paste0(" in current working directory ('", 
        getwd(), "')"), ".", call. = FALSE) 
    12.check_path(path) 
    11.standardise_path(file) 
    10.read_delimited(file, tokenizer, col_names = col_names, col_types = col_types, 
        locale = locale, skip = skip, comment = comment, n_max = n_max, 
        guess_max = guess_max, progress = progress) 
    9.readr::read_delim(system.file("extdata", "input_defs.txt", package = "hisafer"), 
        "\t", col_types = readr::cols()) at utils.R#36
    8.eval(exprs[i], envir) 
    7.eval(exprs[i], envir) 
    6.source_one(file, envir = envir) 
    5.source_many(paths, env) 
    4.force(code) 
    3.withr_with_dir(file.path(pkg$path), source_many(paths, env)) 
    2.load_code(pkg) 
    1.devtools::load_all("hisafer/") 
    

    Notice number 9 in the traceback, which not only displayed the problematic code, but also helpfully showed which file it came from and which line it was on.

    The source of the problem: Your .gitignore

    In your .gitignore, you have the lines

    inst/extdata/
    inst/extdata/*
    

    which means all the files and subfolders in inst/extdata/ are not tracked, so when users try to install from GitHub, they're not getting the extdata/ files they need for your package to work properly.

    As a side note, even if a user downloads your repo and manually adds in input_defs.txt and output_defs.txt, they won't have some other template directories you want them to have for the same reason, so building the vignettes then causes an error in the install.