R package dependencies not installed from Additional_repositories

后端 未结 3 570
栀梦
栀梦 2020-12-19 15:42

I am developing a package that requires the namespace of another package, OpenMx. This package is only available from it\'s own repository, but specifying this repository in

相关标签:
3条回答
  • 2020-12-19 15:51

    So it appears that the Additional_repositories field is only used to check the existence of any suggested packages, but they are not actually loaded, and hence if any examples or vignettes use these packages, the build process will break. I have worked around the problem for now by setting examples to not run and including a pre-built vignette instead.

    0 讨论(0)
  • 2020-12-19 15:57

    AFAIK Additional_repositories is still a free-form field and not automatically added to the options("repos") consulted by download.packages() and hence install.packages() or update.packages().

    For the very problem of adding repos beyond CRAN, I wrote a little helper package drat which a few people, myself included, use to host repos either on GitHub (a "default" mode as it is so easy via gh-pages) or any other http-accessible server---ie local servers within a company or workgroup. Drat does nothing particularly difficult, but for this default case of adding a repository of user, say, openmx, all you need is drat::addRepo("openmx") and the rest is inferred from defaults (and assumes a drat repo in account openmx exists).

    I deploy both use cases: newer packages via repos at GitHub, and a work-local repo.

    Edit: But WRE says

    The 'Addiitonal_repositories' field is a comma-separated list of repository URLs where the packages named in the other fields may be found. It is currently used by 'R CMD check' to check that the packages can be found, at least as source packages (which can be installed on any platform).

    which implies it looks there. Odd. And the repo looks legit at the given URL.

    Edit 2: And I sent a patch to R Core for the typo in the above quote.

    0 讨论(0)
  • 2020-12-19 16:11

    See: http://thecoatlessprofessor.com/programming/r-data-packages-in-external-data-repositories-using-the-additional_repositories-field/

    Specifically, note that you can specify:

    if (!requireNamespace("namepackage", quietly = TRUE)) {
      install.packages("namepackage", repos = "http://location-of.com/repo")
    }
    

    To auto add the repo on package load, use:

    .onLoad <- function(libname) {
      repos = getOption("repos")
      repos["<NAME_REPO>"] = "http://location-of.com/repo"
      options(repos = repos)
      invisible(repos)
    }
    

    This negates the need to set repos = ... in install.packages().

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