2015-04-19 10 views
7

Ich habe eine Container-Klasse, die im Grunde eine Liste ist. Da ich Subsetting unterstützen wollte, habe ich den Operator [ überlastet (wahrscheinlich schlecht implementiert).Operator Überlast funktioniert nicht mehr in R-Paket

Jetzt funktioniert das wie erwartet in meiner Entwicklungsumgebung (wenn ich das Paket debuggen). Das heißt, wenn y_old ist ein spectra Objekt und ich tun y_new = y_old[-1], y_new ist immer noch ein spectra Objekt.

jedoch wenn ich das Projekt als Paket kompilieren und installieren Sie es, kehrt der subsetting Operator einen list anstelle eines spectra Objekt.

Irgendwelche Ahnung von dem, was vor sich geht?

EDIT

habe ich vergessen zu erwähnen, dass ich RStudio und die devtools Bibliothek bin mit.

+2

Haben Sie eine Zeile mit 'S3method ("[", Spektren)' im 'NAMESPACE' Datei des Pakets? – nicola

+0

@nicola Nein. Die ** einzige ** Zeile, die ich in 'NAMESPACE' habe, ist' exportPattern ("^ [[: alpha:]] +") ', was ich denke, was RStudio da reinlegt. – dudu

+0

Setzen Sie diese Zeile, erstellen Sie das Paket neu und sehen Sie, ob es funktioniert. – nicola

Antwort

0

Dieses Problem läuft auf RStudios Standardinitialisierung von NAMESPACE hinaus, wenn Sie ein Paket erstellen. Inspizieren der Namespace-Datei zeigt:

exportPattern("^[[:alpha:]]+") 

Welche nicht mit der Teilmenge Operator [, wie MrFlick hingewiesen.

Sie können NAMESPACE entweder manuell Namen hinzufügen oder Sie erhalten RStudio und Roxygen, um die Arbeit für Sie zu erledigen. In RStudio 0.99.902 würden Sie:

  1. install.packages("roxygen2")
  2. prüfen Dokumentation erzeugen mit Roxygen im Menü Erstellen>konfigurieren Werkzeuge bauen>Build-Werkzeuge.
  3. Klicken Sie auf die Schaltfläche Konfigurieren und überprüfen Sie die NAMESPACE-Datei Kontrollkästchen.

Jetzt müssen Sie offensichtlich Roxygen Dokumentation zu Ihren Funktionen hinzuzufügen und erinnere mich an die @export Tag zu verwenden, z.B .:

#' Print hi in R 
#' @export 
print_hi = function(x) print("hi") 

Nach dem Erstellen Sie eine automatisch generierte Namespace-Datei haben sollte. Zum Beispiel:

# Generated by roxygen2: do not edit by hand 

export(print_hi)