2017-10-02 3 views
0

Ich versuche, mein R-Paket in einem lokalen Repository mit seinen Abhängigkeiten bereitzustellen.pkgDep findet keine Abhängigkeiten für mein Paket

Die Idee ist, dieses Repository mit anderen in meiner Firma zu teilen, damit sie meine Funktionen nutzen können. Sie könnten auch meine Paketabhängigkeiten aus dem lokalen Repository installieren, was schneller ist als das Herunterladen von CRAN und verhindert Proxy-Probleme.

Ich benutze miniCRAN und drat dafür.

Fangen wir von einem einfachen Beispiel:

habe ich ein neues mytestpkg Paket in RStudio.

Es enthält nur eine R-Datei (hello.R), die Einfuhren ggplot2:

#' Hello function 
#' 
#' @return NONE 
#' @export 
#' @import ggplot2 
#' 
#' @examples hello() 
hello <- function() { 
    print("Hello, world!") 

    x <- seq(0, 10, by = 0.1) 
    y <- cos(x) 
    my.df <- data.frame(x, y) 
    ggplot(my.df, aes(x, y)) + geom_line() + geom_point() 
} 

I Projektoptionen so konfiguriert, dass ROxygen dem Namensraum-Datei erzeugt. Hier ist, was es enthält:

# Generated by roxygen2: do not edit by hand 

export(hello) 
import(ggplot2) 

Jetzt habe ich das Paket in meinem Repository installieren:

require(miniCRAN) 
# Generate the documentation and update the NAMESPACE file 
devtools::document(roclets=c('rd', 'collate', 'namespace', 'vignette')) 
# Build the package 
package.source.path <- devtools::build() 
# Insert the package in my local repo 
drat::insertPackage(package.source.path, 
        repodir = "C:/path/to/my/repo", 
        action = "prune") 
# Add my local repo to the list of repos 
options(repos = c(CRAN = "https://ftp.igh.cnrs.fr/pub/CRAN/", 
        MyRepo = "file:///C:/path/to/my/repo")) 
# Find dependencies 
pkgs <- c("mytestpkg") 
pkgList <- pkgDep(pkgs, type="source") 

Das Problem hierbei ist, dass pkgList enthält nur eine Saite:

> pkgList 
[1] "mytestpkg" 

Also, wenn ich Rufen Sie makeRepo auf, es kopiert nur mein Paket und nicht seine Abhängigkeiten.

Was habe ich falsch gemacht?

Edit:

Offenbar sieht depPkg für Importe, die in der Beschreibungsdatei, nicht die Namespace-Datei.

Also muss ich die BESCHREIBUNG-Datei jedes Mal manuell bearbeiten, wenn ich einen neuen Import habe? Das ist unbequem ... Konnte Roxygen das nicht tun?

Antwort

1

Um eine Paketabhängigkeit angeben, können Sie verwenden:

devtools::use_package("ggplot2") 

Es werden Ihnen Beschreibungsdatei automatisch hinzugefügt werden.

+0

Das stimmt, aber es ist alles andere als automatisch: Ich muss mein ganzes Paket lesen, um die Importe zu finden, die ich verwende, oder ich muss sie aus der NAMESPACE-Datei kopieren. Dies entspricht dem Kopieren aus der NAMESPACE-Datei in die DESCRIPTION-Datei. – Ben

+0

Natürlich. Soweit ich weiß, gibt es keine Möglichkeit, alle Ihre R-Dateien zu scannen und die verwendeten Pakete in die DESCRIPTION-Datei zu schreiben. Aber wenn es dir jemals gelingt, das zu programmieren, werde ich der Erste sein, der es benutzt :) –