Install a local R package with dependencies from CRAN mirror
Solution 1
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.
Solution 2
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.
Solution 3
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.
WoDoSc
Updated on July 09, 2022Comments
-
WoDoSc almost 2 years
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.
Now I want to install this package on a system where the dependencies are not yet installed, and I would like that the dependencies will be downloaded and installed automatically when I install my package.
I tried:
install.packages("mypackage.tar.gz",type="source",dependencies=TRUE,repos="http://a.cran.mirror")
but it searches for
mypackage.tar.gz
on the mirror (and obviously it does not find), while if I setrepos=NULL
it correctly tries to install the local package file (as documented), but obviously it does not find the dependencies packages.So my question is: is there a way to perform a 'mixed' installation (local package with online dependencies) or the only way to do is to manually install all the dependencies?
-
WoDoSc almost 10 yearsI can not install my local package if I don't have yet installed all its dependencies.
-
WoDoSc almost 10 yearsunfortunately it does not work, even with dependencies set to FALSE, actually the man page clearly specify that with repos set to NULL (needed to install a local package), the dependencies parameter is ignored.
-
Thomas almost 10 years@WoDoSc Okay, many further tests reveals this is really annoying and surprising. I actually think that being able to install local packages without dependencies is a pretty reasonable feature request for R that would be worth submitting.
-
v44k3 almost 3 years
install_local()
worked exactly as needed for me.