sapply mit benutzerdefinierter Funktion (Reihe von if-Anweisungen)

7

Ich möchte eine Funktion ausführen, die zwei Vektoren betrachtet und je nach Vorzeichen der Werte in den beiden Vektoren unterschiedliche Werte zurückgibt. Ich habe eine Funktion geschrieben, die zwei Werte vergleichen kann, aber dann möchte ich das auf zwei Vektoren ausführen. Also habe ich sapply benutzt, aber ich bekomme andere Ergebnisse als erwartet.

%Vor%

Das Folgende gibt das erwartete (und gewünschte) Ergebnis:

%Vor%

Ergebnis: 90, 0, 270, 180

Wenn ich jedoch versuche, die gleichen Vergleiche zu machen, aber Vektoren mit sapply benutze, bekomme ich ein anderes Ergebnis:

%Vor%

Ergebnis: 90, 90, 180, 180.

Ich kann nicht sehen, was los ist, also bitte helfen!

    
Tom Evans 07.01.2013, 13:10
quelle

4 Antworten

11

Sie sollten mapply() anstelle von sapply() verwenden:

%Vor%

Warum? Ihr sapply() wendet bear.correction() auf jeden Eintrag von x ... an, gibt ihm jedoch den gesamten y Vektor als zweites Argument, und so betrachtet bear.correction() nur der erste Eintrag in y in allen vier Fällen. Verwenden Sie mapply() .

, um mehrere Einträge in multiple Vektoren (oder anderen Datenstrukturen) "mitzulaufen"     
Stephan Kolassa 07.01.2013, 13:17
quelle
5

Sie sollten mapply anstelle von sapply verwenden

%Vor%     
Gago-Silva 07.01.2013 13:17
quelle
4

setze browser() in deine Funktion wie folgt:

%Vor%

Sie werden sehen, was genau als Parameter geben:

%Vor%

Wie andere hier sagten, müssen Sie mapply verwenden, um skalare Werte zu erhalten, nicht atomare Vektoren.

aber ich denke, hier mit plyr ist wirklich einfacher (nettes Ausgabeformat)

%Vor%     
agstudy 07.01.2013 13:18
quelle
3

Wenn Sie apply verwenden möchten, müssen Sie ein wenig Ihre Funktion ändern:

%Vor%

Die Funktion nimmt nun einen Vektor mit 2 Werten xy und verwendet das erste wie Ihr altes x und das zweite wie Ihr altes y

%Vor%     
ECII 07.01.2013 13:22
quelle

Tags und Links