Bei der Entwicklung eines R-Pakets ist es für mich üblich, Packrat einfach zu aktivieren und ein lokales Repository zu verwenden und es so zu entwickeln, wie ich es in einer Sitzung erkunde. Aber bei der Veröffentlichung des Pakets ist es ein großes Problem, alle Abhängigkeiten, die ich in dem entwickelten Paket verwendet habe, wiederzugeben und manuell hinzuzufügen. Gibt es einen (halb-) automatischen Weg, dies zu tun? In der NodeJS-Entwicklung können wir einfach npm install --save
verwenden und die Abhängigkeit wird automatisch zu package.json
hinzugefügt.Gibt es eine Möglichkeit, den Abschnitt "Imports" in der Datei DESCRIPTION automatisch zu generieren?
Antwort
Ein üblicher Weg, dies zu tun (wenn auch nicht eine, die viel von der „alten Schule“ R-Programmierer verwendet wird, die soweit ich von Hand ihre NAMESPACE
Dateien pflegen wissen ...) manuell @importFrom
Aussagen in der einfügen roxygen2 Code ... z
obwohl es sicherlich hilfreich wäre, ein automatisiertes System zu haben, um Hinweise zu geben, wenn nichts anderes. Gewiss, Abhängigkeiten auf diese Weise zu pflegen (sicherzustellen, dass für jede Funktion, die eine Abhängigkeit hat, @importFrom
Anweisungen hinzuzufügen) ist besser als zu versuchen, zu verfolgen, wenn Abhängigkeiten (noch) benötigt werden nach Entwicklung des Codes.
@import
und@importFrom
(dieimport
undimportFrom
Aussagen übersetzen) sind sowohl legal, die R extensions guide sagtimportFrom Verwendung selektiv statt Import gute Praxis und vor allem empfohlen, wenn sie von Paketen mit mehr als einem Import Dutzend Exporte.
("good practice" übersetzt "CRAN Maintainer wird schreien, wenn Sie dies nicht tun", ...)
- Ich weiß nicht, ob es einen Weg gibt, zu tun
importFrom
versioniert Anweisungen: R setzt Paket Versionsabhängigkeiten in dasImports:
Feld in derDESCRIPTION
Datei undimportFrom
Anweisungen in der DateiNAMESPACE
: roxygen2 generiert diese Informationen automatisch, aber ich glaube nicht, dass die Zuordnung von Roxygen2-Richtlinien zu /DESCRIPTION
informieren Die Konfiguration ist feinkörnig genug, um dies zu unterstützen ... - Die Ausführung
R CMD check --as-cran
gibt Hinweise zu Funktionen von empfohlenen Paketen, die importiert werden müssen.
Ja, verwenden Sie roxygen2
, um Ihre NAMESPACE
Datei zu generieren.
Beispiel Art und Weise Paketebene Dokumentation zu generieren:
#' @details
#' \tabular{ll}{
#' Package: \tab \cr
#' Type: \tab Package\cr
#' Version: \tab 1.0.0\cr
#' Date: \tab 2016-05-15\cr
#' License: \tab MIT \cr
#' }
#' @useDynLib pkg
#' @importFrom Rcpp evalCpp
#' @importFrom methods is
#' @importFrom stats ts as.ts is.ts
#' @import ggplot2
"_PACKAGE"
Hinweis: Ich neige dazu, halten meine Import-Anweisungen zusammen im Paket-Level-Dokumentation. Sie können diese Anweisungen in der Funktionsdokumentation verwenden.
Verwenden Sie @importFrom <pkg> <function1> <function2>
für bestimmte Importe.
Ansonsten verwenden Sie @import <pkg>
für alle Funktionen in einem bestimmten Paket.
bearbeiten
Um es auf eine bestimmte Version zu sperren, müssen Sie Ihre DESCRIPTION
Datei Imports:
Abschnitt wie so ändern:
Imports:
Rcpp (>= 0.12.5),
scales (<= 0.4.0),
grid (== 0.7-4),
stats
Handelt es sich um bestimmte Versionen? Denken Sie, dass es überflüssig ist, Roxygen2 und Packrat für die Behandlung von Abhängigkeiten zu verwenden? – trVoldemort
Ich bevorzuge Import-Anweisungen mit der Funktionsdokumentation, weil es klar macht * wo * im Code Sie eine bestimmte Funktion benötigen - wenn dieser Code später verschwindet, wissen Sie, dass Sie die Abhängigkeit nicht mehr brauchen. –
Beachten Sie die Bearbeitung für versionsspezifische Paketladungen. @BenBolker Ich finde es einfacher, alles zu zentralisieren und den Paket-Namespace voranzustellen, wenn die Funktion des Pakets aufgerufen wird, z. 'stats :: is.ts()' da ich selten Abhängigkeiten entferne. Wiederum ist jeder Ansatz gültig. – coatless
- 1. Gibt es eine Möglichkeit, den Flugmodusstatus automatisch zu überprüfen?
- 2. Gibt es eine Möglichkeit, entsprechende Resx-Dateien für die String-Lokalisierung in .NET automatisch zu generieren?
- 3. Gibt es eine Möglichkeit, eine __str __() - Implementierung in Python automatisch zu generieren?
- 4. Gibt es eine Möglichkeit, in Netbeans 8 automatisch zu speichern?
- 5. Gibt es eine Möglichkeit, Standardcode für RESTful-Stacks zu generieren?
- 6. Gibt es eine Möglichkeit, Fortschrittsbalken in Oberflächendarstellungen automatisch zu starten?
- 7. Gibt es eine Möglichkeit, Ints mit i zu generieren?
- 8. Gibt es eine Möglichkeit, automatisch alle Javadoc-Kommentare in Eclipse zu generieren?
- 9. Gibt es eine Möglichkeit, diese Diashow automatisch zu verschieben? Diese
- 10. Gibt es eine Möglichkeit, automatisch eine Liste von Spalten zu generieren, die indexiert werden müssen?
- 11. Gibt es eine Möglichkeit, eine Liste von Abhängigkeiten automatisch für Nodejs Skript zu generieren
- 12. Gibt es eine Möglichkeit, eine BNF-Datei von einer DTD zu generieren?
- 13. Gibt es eine Möglichkeit, den Abschnitt "/ JSON/Reply /" der URL zu entfernen?
- 14. Gibt es eine Möglichkeit Subdomains in Meteor JS automatisch zu generieren
- 15. Gibt es eine Möglichkeit, Anforderungen.txt automatisch auszugeben?
- 16. Gibt es eine Möglichkeit, Excel-Spaltenbreiten mit pandas.ExcelWriter automatisch anzupassen?
- 17. Gibt es eine Möglichkeit, WMI-Code/Klassen zu generieren?
- 18. Gibt es eine Möglichkeit, elements.xml-Dateien für die Sharepoint-Entwicklung automatisch zu generieren?
- 19. Gibt es eine Möglichkeit, ObjectId automatisch zu generieren, wenn ein Mungo-Modell neu erstellt wird?
- 20. Gibt es eine Möglichkeit programmgesteuert Python-Bytecode zu generieren?
- 21. Gibt es eine Möglichkeit, Supervisor-Prozesse automatisch neu zu laden?
- 22. Gibt es eine Möglichkeit, Rotverschiebung sql zu generieren?
- 23. Gibt es eine Möglichkeit, GetHashCode und Equals mit ReSharper automatisch zu generieren?
- 24. Gibt es eine Möglichkeit, die Datenflussdiagramme und Flussdiagramme automatisch zu generieren?
- 25. Gibt es eine Möglichkeit, eine Datei in Subversion zu "kleben"?
- 26. Gibt es eine Möglichkeit, alle vorhandenen Gruppen automatisch zu durchlaufen?
- 27. Gibt es eine Möglichkeit für DBUnit, Tabellen automatisch zu erstellen?
- 28. Gibt es eine Möglichkeit automatisch eine #define in jeder Quelldatei
- 29. Gibt es eine Möglichkeit, ConfigurationManager.AppSettings zu überschreiben?
- 30. Gibt es eine Möglichkeit, eine Datei mit Abhängigkeiten in Java automatisch zu erstellen und sie automatisch zu installieren?
Ich denke, * * Der normale Weg, dies zu tun ist manuell roxygen (2) '@ importFrom' Anweisungen in den Code einfügen ... –
Zumindest ist es ein extrem _common_ Weg. – joran
@joran: bessere Wege? (oder meinen Sie die Tatsache, dass (AFAIK) old-school/R-core-Entwickler nicht dazu neigen, roxygen zu verwenden?) –