Verwendung der Devel Version von dplyr's enquo und quo_name in einer Funktion mit tidyr und ggplot2

8
%Vor%

Ich versuche eine Funktion zu schreiben, die Quases aus der bald erscheinenden dplyr-devel-Version zusammen mit tidyr :: gather und ggplot2 enthält. Bis jetzt scheint es mit Tidyr zu funktionieren, aber ich habe Probleme mit dem Plotten.

Die folgende Funktion scheint mit tidyrs Versammlung zu funktionieren:

%Vor%

Aber ich kann nicht herausfinden, wie man die Plots zum Laufen bringt. Ich habe versucht, !! Gath mit ggplot2, aber es hat nicht funktioniert.

%Vor%     
Mike 14.04.2017, 05:43
quelle

3 Antworten

6

Ich fühle mich wie das Hauptproblem ist ggplot ist gierig, wenn es !!gath zu bewerten versucht und !(!gath) , einen Fehler als not(gath) hat keine Bedeutung. Ich habe dieses Problem viel auftauchen, wenn ich versucht habe, !! zu verwenden, so dass ich irgendwie müde bin, es in seiner Zuckerform zu verwenden.

Wenn jemand genauer das Problem richtig identifizieren könnte, wäre es definitiv hilfreich.

%Vor%

Es scheint einige Fehler in dem Funktionsaufruf zu geben, den Sie in der Frage geschrieben haben. Wenn Sie Ihren Code richtig absetzen, vermeiden Sie das.

Sie haben auch nicht den Aufruf rlang , ich habe gerade nicht die neueste dplyr Version installiert.

BEARBEITEN Einige Gedanken mit einem einfacheren mtcars Beispiel:

Tbh Ich bin mir ziemlich unsicher, was hier vor sich geht, aber ich stelle mir vor, dass es damit zu tun hat, dass die ggplot2 jetzt relativ alt ist und ein etwas anderes Design hat? Wenn wir in aes mit debug einsteigen, finden wir eine ähnliche Struktur wie

%Vor%

(Dies wird nicht durch den Interpreter laufen, sondern ist ungefähr wie die Struktur aussieht). Ich denke, das zeigt, warum der Aufruf eval hier notwendig ist, o / w ggplot versucht, rlang::UQE(var) der y Ästhetik zuzuordnen und meldet, dass er nicht weiß, was er mit etwas der Klasse name machen soll. eval wertet den Namen beispielsweise auf cyl aus, dann kann die Ästhetik als normal zugeordnet werden.

Ich stelle mir vor, dass dplyr Verben diesen zusätzlichen Zuordnungsschritt nicht haben, bei dem die Argumente auf dieselbe Weise in eine Zwischenstruktur manipuliert werden, so dass dieses Problem nicht auftritt.

Auch wenn ich gesagt habe, dass Sie den Aufruf rlang nicht verwenden müssen, lag das daran, dass ich annahm, dass diese Funktion in die neue dplyr Version erneut exportiert wurde. Wegen der ganzen !!(...) oder !(!(...)) Sache, die ich vorher erwähnt habe, bevorzuge ich rlang::"!!" oder rlang::UQE (was exakt gleichwertig ist, glaube ich).

Das meiste davon ist jedoch Spekulation und wenn jemand mich korrigieren könnte über alles, was ich falsch verstanden habe, würde es geschätzt werden.

    
Akhil Nair 30.04.2017, 16:46
quelle
8
___ antwort43601059 ___

Um dies zu erreichen, musste ich dplyr::quo_name verwenden, um den Vorgang in eine Zeichenfolge umzuwandeln. Ich musste auch ggplot2::aes_string verwenden, was auch erfordert, dass alle Eingaben Strings sind und daher mit "" zitiert werden.

%Vor%     
___ qstntxt ___
%Vor%

Ich versuche eine Funktion zu schreiben, die Quases aus der bald erscheinenden dplyr-devel-Version zusammen mit tidyr :: gather und ggplot2 enthält. Bis jetzt scheint es mit Tidyr zu funktionieren, aber ich habe Probleme mit dem Plotten.

Die folgende Funktion scheint mit tidyrs Versammlung zu funktionieren:

%Vor%

Aber ich kann nicht herausfinden, wie man die Plots zum Laufen bringt. Ich habe versucht, !! Gath mit ggplot2, aber es hat nicht funktioniert.

%Vor%     
___ tag123r ___ R ist eine freie, quelloffene Programmiersprache und Softwareumgebung für statistische Berechnungen, Bioinformatik, Visualisierung und allgemeine Datenverarbeitung. Stellen Sie minimale, reproduzierbare, repräsentative Beispiele für Ihre Fragen bereit. Verwenden Sie dput () für Daten und geben Sie alle Nicht-Basis-Pakete mit Bibliotheksaufrufen an. Bilder für Daten oder Code nicht einbetten, eingerückte Codeblöcke verwenden. Verwenden Sie für statistische Fragen http://stats.stackexchange.com. ___ answer43708842 ___

Ich fühle mich wie das Hauptproblem ist %code% ist gierig, wenn es %code% zu bewerten versucht und %code% , einen Fehler als %code% hat keine Bedeutung. Ich habe dieses Problem viel auftauchen, wenn ich versucht habe, %code% zu verwenden, so dass ich irgendwie müde bin, es in seiner Zuckerform zu verwenden.

Wenn jemand genauer das Problem richtig identifizieren könnte, wäre es definitiv hilfreich.

%Vor%

Es scheint einige Fehler in dem Funktionsaufruf zu geben, den Sie in der Frage geschrieben haben. Wenn Sie Ihren Code richtig absetzen, vermeiden Sie das.

Sie haben auch nicht den Aufruf %code% , ich habe gerade nicht die neueste %code% Version installiert.

BEARBEITEN Einige Gedanken mit einem einfacheren %code% Beispiel:

Tbh Ich bin mir ziemlich unsicher, was hier vor sich geht, aber ich stelle mir vor, dass es damit zu tun hat, dass die %code% jetzt relativ alt ist und ein etwas anderes Design hat? Wenn wir in %code% mit %code% einsteigen, finden wir eine ähnliche Struktur wie

%Vor%

(Dies wird nicht durch den Interpreter laufen, sondern ist ungefähr wie die Struktur aussieht). Ich denke, das zeigt, warum der Aufruf %code% hier notwendig ist, o / w ggplot versucht, %code% der %code% Ästhetik zuzuordnen und meldet, dass er nicht weiß, was er mit etwas der Klasse %code% machen soll. %code% wertet den Namen beispielsweise auf %code% aus, dann kann die Ästhetik als normal zugeordnet werden.

Ich stelle mir vor, dass %code% Verben diesen zusätzlichen Zuordnungsschritt nicht haben, bei dem die Argumente auf dieselbe Weise in eine Zwischenstruktur manipuliert werden, so dass dieses Problem nicht auftritt.

Auch wenn ich gesagt habe, dass Sie den Aufruf %code% nicht verwenden müssen, lag das daran, dass ich annahm, dass diese Funktion in die neue %code% Version erneut exportiert wurde. Wegen der ganzen %code% oder %code% Sache, die ich vorher erwähnt habe, bevorzuge ich %code% oder %code% (was exakt gleichwertig ist, glaube ich).

Das meiste davon ist jedoch Spekulation und wenn jemand mich korrigieren könnte über alles, was ich falsch verstanden habe, würde es geschätzt werden.

    
___ tag123dplyr ___ Verwenden Sie dieses Tag für Fragen zu Funktionen aus dem dplyr-Paket, z. B. group_by, summarisieren, filtern und auswählen. ___ tag123ggplot2 ___ ggplot2 ist ein aktiv verwaltetes Open-Source-Diagramm-Zeichnungspaket für R, geschrieben von Hadley Wickham, basierend auf den Prinzipien von "Grammar of Graphics". Es ersetzt teilweise die grundlegende Darstellung von R und das Gitterpaket, während es eine saubere, leistungsfähige, orthogonale und spaßige API bereitstellt. ___ tag123rlang ___ rlang ist ein R-Paket zum Erstellen sauberer Auswertungsschnittstellen und zum Bearbeiten von Sprach- und Umgebungsobjekten. Es ist ein Hilfspaket, das vielen der patientenfreundlichen Paketfamilien zugrunde liegt. ___ answer47063066 ___

Ich habe diese Frage kürzlich an anderer Stelle beantwortet ( Verwenden Sie dplyr SE mit ggplot2 ). Ich bin mir nicht sicher, wie man Duplikate markiert, deshalb werde ich das hier wiederholen.

  

Wenn Sie bereits mit Quasseln umgehen, ist die Syntax sauberer, wenn Sie sie verwenden    %code% anstatt %code% .

Dieser Code sollte in Ihrem Beispiel funktionieren. Beachten Sie, dass alle hartcodierten Variablen (Wert, Perc, Schlüssel) mit einer Tilda zitiert werden, während die Quosure (Gath) direkt verwendet wird.

%Vor%     
___ tag123tidyverse ___ NICHT VERWENDEN, wenn sich Ihre Frage auf eine oder zwei Komponenten von tidyverse bezieht, z. B. dplyr oder ggplot2. Verwenden Sie * diese * Tags und versehen Sie sie mit 'r', um eine bessere Antwort zu erhalten. ___ qstnhdr ___ Verwendung der Devel Version von dplyr's enquo und quo_name in einer Funktion mit tidyr und ggplot2 ___
Mike 25.04.2017 03:25
quelle
0

Ich habe diese Frage kürzlich an anderer Stelle beantwortet ( Verwenden Sie dplyr SE mit ggplot2 ). Ich bin mir nicht sicher, wie man Duplikate markiert, deshalb werde ich das hier wiederholen.

  

Wenn Sie bereits mit Quasseln umgehen, ist die Syntax sauberer, wenn Sie sie verwenden    aes_ anstatt aes_string .

Dieser Code sollte in Ihrem Beispiel funktionieren. Beachten Sie, dass alle hartcodierten Variablen (Wert, Perc, Schlüssel) mit einer Tilda zitiert werden, während die Quosure (Gath) direkt verwendet wird.

%Vor%     
Stanwood 01.11.2017 20:22
quelle

Tags und Links