on-the-fly zu erhalten. Ich schreibe ein R-Paket, das eine Vielzahl von Bioconductor Annotation-Datenpaketen verwendet. Die spezifischen Datenpakete variieren mit dem Anwendungsfall. Als solche habe ich eine Funktion, die so etwas wie dies funktioniert:Verwenden Sie 'require' Paketcode, um Datenpakete in R
if (!require(biocpack_name, character.only=T)) {
source("https://bioconductor.org/biocLite.R")
BiocInstaller::biocLite(biocpack_name)
require(biocpack_name , character.only=T)
}
biocpack_name kann von ~ 30 + Kommentardatenpakete mehrere sein, die auf die speziellen Daten, die analysiert wurden, nachgeschlagen werden. Daher möchte ich nicht jedes zu "Suggests" hinzufügen müssen (ich bin mir nicht einmal sicher, dass das funktionieren würde, weil der Fehler nicht für ein Paket ist, sondern eine Zeichenfolge, die das Paket angibt). R CMD CHK gibt mir diesen Fehler:
'library' or 'require' call not declared from: ‘biocpack_name’
'library' or 'require' call to ‘biocpack_name’ in package code.
Wie komme ich um diese?
Ändern von T auf TRUE behobenes Problem. Ein nicht sicherer Ansatz würde funktionieren, da das Paket innerhalb einer Funktion geladen, dann aber von einer anderen Funktion verwendet wird. Würde "db" nicht lokal für die Funktion sein, in der es erstellt wurde? – alexvpickering
Ja, Sie müssten sich Gedanken darüber machen, wie Ihre Funktionen gestaltet wurden. vielleicht wird der obige Code 'get_db()' genannt und gibt das db-Symbol jedes Mal zurück, wenn es gebraucht wird? –
Ich habe versucht, wie vorgeschlagen, aber stieß auf einen Fehler. Zum Beispiel, wenn 'biopack_name <-" hgu95av2.db "' und das zurückgegebene Objekt 'db' heißt. Folgendes funktioniert gut, um einige Beispielschlüssel zu erhalten: 'keys <- AnnotationDbi :: keys (db) [1: 5]'. Sowohl 'AnnotationDbi :: mapIds (db, Schlüssel," SYMBOL ", Schlüsseltyp =" PROBEID ")' und 'AnnotationDbi :: select (db, Schlüssel," SYMBOL ")' scheitern mit 'Objekt 'hgu95av2ORGPKG' nicht gefunden ' – alexvpickering