2017-08-06 3 views
4

ich eine einzelne Spalte mit der folgenden Syntax für Funktionen Teilmenge könnte die data.frame oder list zurück:

library(dplyr) 
filter(mtcars, disp > 400)$mpg 
# [1] 10.4 10.4 14.7 

Aber das verursacht die folgenden Fehler, wenn sie in einem benutzten Rohr (%>%):

mtcars %>% filter(disp > 400)$mpg 
# Error in .$filter(disp > 400) : 
# 3 arguments passed to '$' which requires 2 

ich weiß, möchte warum $ nicht, wenn sie in Rohr wie im obigen Beispiel verwendet, nicht funktioniert.

+2

Es gibt auch die 'Pull'-Funktion von dplyr, die Sie verwenden können, um eine Spalte als Vektor – Sotos

+1

@Sotos zu extrahieren, das ist hilfreich, eine neue Funktion für mich. – mt1022

+2

Ich benutze 'Pull' auch kürzlich, aber bevor ich es tat' (mtcars%>% filter (disp> 400)) $ mpg' – AntoniosK

Antwort

2

Ich denke, ich habe den Grund herausgefunden.

Wenn ich rufe filter(mtcars, disp > 400)$mpg, was tatsächlich geschehen ist:

`$`(filter(mtcars, disp > 400), mpg) 
# [1] 10.4 10.4 14.7 

In ähnlicher Weise wird mtcars %>% filter(disp > 400)$mpg interpretiert als:

`$`(mtcars, filter(disp > 400), mpg) 

, weil linke Skala von %>% wird das erste Argument der Funktion bei rhs sein . Dies reproduziert den gleichen Fehler, der $ 2 Args erfordert, während 3 geliefert wurden.

# Error in mtcars$filter(disp > 400) : 
# 3 arguments passed to '$' which requires 2 

Die Fehlermeldung bestätigte auch die obige Spekulation. mtcars wird als data.frame-Name verwendet und filter(disp > 400) wird als Spaltenname behandelt: mtcars$filter(disp > 400).

Verwandte Themen