Install a local R package with dependencies from CRAN mirror

后端 未结 3 1592
一整个雨季
一整个雨季 2020-12-13 00:15

I have built an R package, i.e. I have the mypackage.tar.gz file. This package depends on several other packages, all downloadable and installable from any CRAN mirror.

相关标签:
3条回答
  • 2020-12-13 00:35

    You could use install from the devtools package. Just run install("<directory of your package>", dependencies = TRUE). Its help states:

    Uses R CMD INSTALL to install the package. Will also try to install dependencies of the package from CRAN, if they're not already installed.

    0 讨论(0)
  • 2020-12-13 00:37

    Here, I'm using untar() with devtools::install() and passing in a directory to which the source tarball has been extracted.

    d <- tempdir()
    untar("mypackage.tar.gz", compressed="gzip", exdir=d)
    devtools::install(file.path(d, "mypackage"), dependencies=TRUE,
                      repos="https://cloud.r-project.org/")
    

    If you want to install from multiple repos, you can provide a list of them. For example, to use both Bioconductor and CRAN, you could run:

     devtools::install(file.path(d, "mypackage"), dependencies=TRUE,
                       repos=BiocManager::repositories())
    

    NOTE: I can't figure out how to directly pass the tarball to install(), but this solution works in the meantime and leaves no clutter because we extract to a temp directory. It seems install_local() should be able to take a tarball, but I am getting an error when attempting to do so.

    0 讨论(0)
  • 2020-12-13 00:40

    If you already have installed your local package, you should be able to use a couple functions in tools to install the dependencies from CRAN:

    library('tools')
    installFoundDepends(pkgDepends('mypackage', local = FALSE)$Found)
    

    Note: You can pass args (like repos) through installFoundDepends to install.packages.

    You can also use the Depends element from the pkgDepends output to pass directly to install.packages:

    install.packages(pkgDepends('mypackage')$Depends)
    

    UPDATE: Apparently it is not possible to install a local package with dependencies=FALSE. This seems odd, since you can do that for a remote package from a repository. The reason (looking at the source code) is that if(is.null(repos) & missing(contriburl)), installation is handled via system calls to R CMD INSTALL, which has no dependency-related arguments.

    0 讨论(0)
提交回复
热议问题