Anhand der Daten.Tisch-Paket in mein Angebot
Ich versuche die Daten nutzen zu können.Tisch-Paket in mein Angebot. MWE ist wie folgt:
Ich eine Funktion erstellen, zu testen.viel Spaß, das schafft einfach eine kleine Daten.Tabelle-Objekt, und klicken Sie dann Summen die "Val" - Spalte gruppieren, indem Sie die "A" - Spalte. Der code ist
test.fun<-function ()
{
library(data.table)
testdata<-data.table(A=rep(seq(1,5), 5), Val=rnorm(25))
setkey(testdata, A)
res<-testdata[,{list(Ct=length(Val),Total=sum(Val),Avg=mean(Val))},"A"]
return(res)
}
Wenn ich diese Funktion regelmäßig in einer R-Sitzung, und führen Sie dann die Funktion, funktioniert es wie erwartet.
> res<-test.fun()
data.table 1.8.0 For help type: help("data.table")
> res
A Ct Total Avg
[1,] 1 5 -0.5326444 -0.1065289
[2,] 2 5 -4.0832062 -0.8166412
[3,] 3 5 0.9458251 0.1891650
[4,] 4 5 2.0474791 0.4094958
[5,] 5 5 2.3609443 0.4721889
Wenn ich diese Funktion in ein Paket, das Paket installieren, laden Sie das Paket, und dann die Funktion auszuführen, bekomme ich eine Fehlermeldung.
> library(testpackage)
> res<-test.fun()
data.table 1.8.0 For help type: help("data.table")
Error in `[.data.frame`(x, i, j) : object 'Val' not found
Kann jemand mir erklären, warum dies geschieht und was kann ich tun, um es zu beheben. Jede Hilfe wird sehr geschätzt.
- Meine Vermutung ist, dass Sie noch nicht deklariert eine Abhängigkeit. Sie sollten zu entfernen
library(data.table)
Ihre Funktion, und erklärendepends:data.table
im namespace und BESCHREIBUNG.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Andrie Vermutung richtig ist, +1. Gibt es eine FAQ (siehe
vignette("datatable-faq")
), sowie eine neue vignette auf importierendata.table
:Weiteren hintergrund ... an der Spitze der
[.data.table
(und anderedata.table
Funktionen), werden Sie sehen einen Schalter, je nach dem Ergebnis eines Aufrufscedta()
. Dieser steht für die Aufrufende Umgebung Daten Tabelle Bewusst. Eingabedata.table:::cedta
zeigt, wie es gemacht wird. Es stützt sich auf das aufrufende Paket mit einem namespace, namespace Importieren 'Ing oder von' Ing aufdata.table
. Dies ist, wiedata.table
übergeben werden kann, um nicht-Daten.Tisch-bewusst - Pakete (wie Funktionen inbase
) und die Pakete können absolut standard[.data.frame
syntax auf diedata.table
, selig nicht bewusst, dass diedata.frame
is()
einedata.table
auch.Dies ist auch der Grund, warum
data.table
Vererbung nicht verwendet werden kompatibel mit namespaceless Pakete, und warum auf Anforderung des Anwenders mussten wir Fragen Autoren solcher Pakete auf einen namespace hinzuzufügen, um Ihre Paket kompatibel sein. Glücklich, dass nun R fügt ein Standard-namespace für Pakete fehlen (von v2.14.0), das problem ist Weg :data.table
zu einem Nutzer in einer interaktiven Sitzung, werden Sie erforderlich, um diedata.table
Semantik, oder gibt es eine Möglichkeit, ich könnte die Unterstützung der vertrautendata.frame
syntax?import(data.table)
im NAMESPACE als auch?@import data.table
im code so Roxygen fügtimport(data.table)
im NAMESPACE.@import dtplyr
Tat helfen. Wäre daran interessiert zu wissen, warum.roxygen2
zusätzliche Schicht (@import
) nicht ganz übersetzen, um genau den oben. Haben Sie einen Blick aufroxygen2
's-Ausgabe, um zu sehen, ob es produziert hat genau über.Hier ist das komplette Rezept:
1.)
data.table
zuImports
in IhremDESCRIPTION
- Datei.2) Fügen Sie
@import data.table
auf Ihre jeweiligen .R-Datei (D. H., die .R-Datei, die Häuser Ihrer Funktion, die wirft den FehlerError in [.data.frame(x, i, j) : object 'Val' not found
).3) Typ
library(devtools)
und stellen Sie Ihr Arbeitsverzeichnis auf das Haupt-Verzeichnis Ihres R-Paket.4) Typ
document()
. Dadurch wird sichergestellt, dass IhrNAMESPACE
- Datei enthält eineimport(data.table)
Linie.5) Typ
build()
6) Geben Sie
install()
Für eine schöne Grundierung auf, was
build()
undinstall()
tun, siehe: http://kbroman.org/pkg_primer/.Dann, wenn Sie schließen Sie Ihre R-Sitzung und login das nächste mal, können Sie sofort rechts in springen mit:
1) Typ
library("my_R_package")
2) Geben Sie den Namen der Funktion, die in einem Gehäuse untergebracht .R oben erwähnte Datei.
3) Genießen! Sollten Sie nicht mehr die gefürchteten
Error in [.data.frame(x, i, j) : object 'Val' not found
@import data.table
Befehl ist besonders hilfreich,function not found
. Ich konnte nicht finden, etwas ähnliches so habe ich eine Frage stackoverflow.com/questions/56720520/...