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?
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
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 :) –