mit I wie dies mit einer Unterschrift eine Funktion hatte:intelligent auf die Ellipsen in einer R-Funktion
myFunction=function(class="Class",v1='y',v2='y',dfparam=df){
wo df
ein Datenrahmen ist, und es wird angenommen, dass es ein Attribut Class
in df bezeichnet wird. Ich wollte es allgemeiner machen, so dass es eine Vielzahl von Datenrahmen akzeptieren kann, df, nicht nur eine, die ein Attribut namens Klasse hat. Also fügte ich einen className
Parameter hinzu und classValue
Parameter, um den Klassenparameter zu ersetzen. Auch möchte ich unbegrenzte Argumente v1 ermöglichen, v2, v3 usw. und so bin ich mit den Elipsis wie folgt aus:
myFunctionGeneral = function(className="Class", classValue="democrat", dfparam=df, ...){
arguments <- list(...)
vor der Verwendung des Elipsis hatte ich eine Linie, die die Argumente wie folgt verwendet:
X_bool=dfparam$V1==v1 & dfparam$V2==v2
ich begann diese Weise aus:
X_bool=dfparam[,2]==arguments[1] & dfparam[,3]==arguments[2]
aber ich möchte dies für eine unbegrenzte Anzahl von möglichen paremeters im Elipsis tun. Also muss ich erweitern diese Aussage durch irgendwie Entwirrung der Ellipse. Hier ist ein Beispiel:
install.packages("vcd")
library(vcd)
data(Arthritis)
AAr=Arthritis[,-c(1,4)]
myFunctionGeneral=function(className="Class",classValue="democrat",dfparam=df, ...){
dfparam$names<-rownames(dfparam)
arguments<-list(...)
dfparamDroppedClass=dfparam[,-1]
#X_bool=dfparam[,2]==arguments[1] & dfparam[,3]==arguments[2]
X_bool=do.call(all, Map("==", dfparamDroppedClass, arguments))
X=dfparam[X_bool,]
}
Vielen Dank. Ich denke, Argumente <-list (...) ist analog zu Ihren Argumenten <- list (1, 2, 3), aber ich brauche auch eine Liste, die dfparam [, 2], dfparam [, 3] usw. enthält es muss auch dynamisch die gleiche Größe wie Argumente haben und muss mit 2 nicht 1 beginnen. Haben Sie eine Idee dafür? – matt
Ein data.frame ist auch eine Liste. Und Sie wissen, wie Sie die erste Spalte eines data.frames entfernen, oder? – Roland
Danke! Ich habe es versucht: dfparamDroppedClass = dfparam [, - 1] und dann folgendes: X_bool = do.call (all, Map ("==", dfparamDroppedClass, Argumente)). Aber ich bekomme eine Warnung Warnmeldung: In Mapply (FUN = f, ..., SIMPLIFY = FALSCH): längeren Argument kein Vielfaches der Länge kürzer. Und auch die Funktion, die ich schreibe, erzeugt nicht die richtige Ausgabe. Wenn ich es mit diesem ausführen: X_bool = dfparam [, 2] == Argumente [1] & dfparam [, 3] == Argumente [2], scheint es zu funktionieren. – matt