Tippfehler in 'dplyr :: percent_rank'?

8

Beim Versuch zu verstehen, was "percent_rank" macht, Ich habe einen Blick auf den Code geworfen und den Ausdruck length(!is.na(x)) gefunden. Ich kann mir keine Situation vorstellen, in der length(x) != length(!x) also ich frage mich, ob das ein Tippfehler ist (vielleicht sollte es sum(!is.na(x)) sein?) oder wenn hier wirklich so eine Situation ist ??

    
Jthorpe 12.05.2015, 22:40
quelle

3 Antworten

2

Dies ist ein Fehler. Dieser Code wurde in diesem Commit eingeführt. Dies ist eine angegebene Antwort auf Ausgabe 774 . Hadley schreibt in Heft # 774:

  

Oh hoppla, ich würde sagen, das ist ein Fehler in meiner R-Implementierung. Der Nenner   sollte die Anzahl der Nicht-NAs sein, nicht die Länge. (Hervorhebung hinzugefügt)

     

Wir brauchen keine Optionen, um das Verhalten zu kontrollieren, stellen Sie einfach sicher, dass NAs in der Eingabe sind   sind NA in der Ausgabe

Aber wie Sie bemerken, hätte es sum(!is.na(x)) not length sein müssen, um die beabsichtigte Korrektur zu implementieren.

    
Sam Firke 13.05.2015 00:31
quelle
1

Ich denke, es ist eine Frage der Präferenz. Sogar die Hilfe sagt:

  

x ein Vektor von Werten zum Rang. Fehlende Werte bleiben so wie sie sind.   Wenn Sie sie als die kleinsten oder größten Werte behandeln wollen,   Ersetzen Sie vor dem Ranking durch Inf oder -Inf.

Wenn Sie percent_rank in einzelne Elemente zerlegen und auf einen Beispielvektor anwenden, erhalten Sie:

%Vor%

Mir geht es gut, wie die Funktion gerade funktioniert. Sie müssen nur sicherstellen, dass NA in Inf/-Inf geändert wird, wenn Sie immer einen Bereich von 0-1 erhalten möchten. Worüber ich mir nicht sicher bin, ob dies dem SQL2003-Standard entspricht.

    
Tomas Greif 13.05.2015 00:09
quelle
1

Von ?is.na Ich sehe zwei Möglichkeiten:

  1. Erstens wird, wenn die Standardmethode is.na() verwendet wird, dokumentiert, dass "ein logischer Vektor mit derselben Länge wie sein Argument x zurückgegeben wird, der TRUE für die Elemente enthält, die mit NA markiert sind." oder, für numerische oder komplexe Vektoren, NaN und FALSE ansonsten. " (aus ?is.na , Wertbereich).

    Sie haben also recht, wenn Sie vermuten, dass es keinen Fall gibt, in dem length(is.na(x)) != length(!is.na(x)) ist.

  2. Wenn eine nicht standardmäßige Methode angewendet wurde, konnte der Autor dieser Methode ein Objekt zurückgeben, das nicht mit der Dokumentation des generischen Objekts (und der Standardmethode) kompatibel ist. In diesem Fall sind alle Wetten deaktiviert.

    Ich finde diese Option etwas schwierig, aber es ist möglich, wenn sie pervers ist.

Ich schlage vor, dass Sie das Problem auf Hadleys Github Repo melden.

    
Gavin Simpson 12.05.2015 23:58
quelle

Tags und Links