2016-05-17 5 views
2

Ich versuche, ein Paket zu schreiben, das einige Abhängigkeiten hat. Ich bin in der Lage, die Abhängigkeiten manuell unter Verwendung library() zu laden, aber ich möchte, dass sie zusammen mit meinem Paket automatisch geladen werden. Ich dachte, das Attribut Imports auf der DESCRIPTION Datei könnte den Job, aber es funktioniert nicht für mich.Wie Sie beim Schreiben eines Pakets Abhängigkeiten angeben?

Also von Grund auf neu Ich beginne mit einer völlig neuen Sitzung:

sessionInfo() 

R version 3.3.0 (2016-05-03) 
Platform: x86_64-apple-darwin13.4.0 (64-bit) 
Running under: OS X 10.11.4 (El Capitan) 

locale: 
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

loaded via a namespace (and not attached): 
[1] tools_3.3.0 

Dann lade ich mein Paket, das

Imports: 
dplyr, 
zipcode, 
readxl, 
mosaic 

In der Tat sucht wieder zu meiner Sitzung angegeben, die Abhängigkeiten I importiert für

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] mypackage_0.1.0 

loaded via a namespace (and not attached): 
[1] Rcpp_0.12.4  nloptr_1.0.4  plyr_1.8.3   tools_3.3.0  mosaic_0.13.0  testthat_1.0.2  digest_0.6.9  
[8] lme4_1.1-12  zipcode_1.0  memoise_1.0.0  gtable_0.2.0  nlme_3.1-127  lattice_0.20-33 mgcv_1.8-12  
[15] Matrix_1.2-6  DBI_0.4-1   parallel_3.3.0  SparseM_1.7  ggdendro_0.1-20 gridExtra_2.2.1 withr_1.0.1  
[22] dplyr_0.4.3  stringr_1.0.0  roxygen2_5.0.1  MatrixModels_0.4-1 devtools_1.11.1 grid_3.3.0   nnet_7.3-12  
[29] R6_2.1.2   readxl_0.1.1  mosaicData_0.13.0 minqa_1.2.4  reshape2_1.4.1  ggplot2_2.1.0  car_2.1-2   
[36] magrittr_1.5  scales_0.4.0  splines_3.3.0  MASS_7.3-45  assertthat_0.1  pbkrtest_0.4-6  colorspace_1.2-6 
[43] quantreg_5.21  stringi_1.0-1  munsell_0.4.3  crayon_1.3.1 

Wenn jedoch: mypackage_0.1.0 richtig geladen Ich schreibe eine Funktion verschachteln andere Funktionen aus einem der "geladen über Namespace" -Pakete, bekomme ich einen Fehler. Zum Beispiel:

f <- function(x) {tbl_df(x)}  
> f(cars) 
Error in f(cars) : could not find function "tbl_df" 

Ich dachte, das Problem war, dass die Funktionen von Abhängigkeiten nur innerhalb anderen Funktionen des Pakets verwendet werden könnten, ich schreibe. Als ich jedoch f() als eine neue Funktion meines Pakets definierte, bekam ich den gleichen Fehler.

Ich wurde vorgeschlagen, zu überprüfen, dass die NAMESPACE-Datei gespeichert und erneut geladen wird.

Dies ist meine NAMESPACE-Datei mit der f()-Funktion.

# Generated by roxygen2: do not edit by hand 

export(chain_spreadsheet) 
export(f) 
export(mapping) 
export(stalary) 

Aber auch nach dem Neugenerieren der Dokumentation und dem Neuladen des Pakets habe ich immer noch das gleiche Problem.

+1

Haben Sie Ihre NAMESPACE-Datei ebenfalls aktualisiert? – cdeterman

+0

Entschuldigung, ich habe es überprüft. Ja, ich habe den NAMESPACE aktualisiert. Funktioniert immer noch nicht. – Dambo

+0

Beziehen Sie sich auf die Funktion, die Sie zeigen, oder in Ihrem Paket? Sobald Sie den NAMESPACE aktualisiert haben, müssen Sie das Paket neu aufbauen/neu installieren und es sollte funktionieren. Sie sollten NAMESPACE wahrscheinlich zu der Frage hinzufügen, ob das immer noch ein Problem ist. – cdeterman

Antwort

2

Sie müssen die import Anweisungen auch in der NAMESPACE-Datei haben. Um dies mit roxygen2 automatisch zu machen, müssen Sie die @import Methode verwenden.

Zum Beispiel in jeder Datei .R

foo.R

#' @import dplyr 

# my other code 
... 

Wenn Sie jetzt mit roxygen2 Wiederaufbau der Namespace wird automatisch aktualisiert. Deshalb heißt es "nicht von Hand bearbeiten", denn roxygen2 soll sich um alles kümmern. Sie müssen nur die notwendigen Funktionen verwenden.

+0

Ich entschuldige mich, es funktioniert teilweise, aber ich habe keine Ahnung, warum es die Funktion 'readxl :: excel_sheehts' nicht finden kann. Das Paket 'readxl' befindet sich innerhalb der Bibliotheken' loaded via namespace', wenn ich 'sessionInfo()' aufrufe, aber anscheinend sieht R es nicht. Ich habe jedoch eine andere Funktion, die auf 'dplyr' basiert, die so geladen wird, wie Sie sagten, und es funktioniert gut. – Dambo

+0

@Dambo ist 'excel_sheehts' ein Tippfehler? Stellen Sie sicher, dass Sie den '@import readxl' haben und dass der NAMESPACE beides nach dem Neuaufbau hat. – cdeterman

+0

Sorry, das war ich Typo. Und ja, es hat beides, und ich kann sehen, dass beide 'sessionInfo()' ausführen (aber innerhalb des "via Namespace geladen", nicht innerhalb des "attached"). Übrigens bekomme ich immer noch nicht genau den Zweck, die Bibliotheken in die Beschreibungsdatei zu importieren, wenn ich dann gezwungen bin, '@ import' für jede einzelne Funktion zu verwenden. Ich werde später mit nur einer Funktion ein neues Paket erstellen, das sowohl 'dplyr' als auch' readxl' verwendet, um eine solidere Replikation des Problems zu ermöglichen. Vielen Dank. – Dambo

Verwandte Themen