2017-08-06 15 views
4

我能子集的語法如下一列用於返回data.framelist功能:

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

但是,這將導致以下錯誤在使用時管(%>%):

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

我想知道爲什麼$管道使用像上面的例子中,當不工作。

+2

還有dplyr的'pull'功能,你可以用它來提取一列作爲矢量 – Sotos

+1

@Sotos,這對我來說是一個有用的新功能。 – mt1022

+2

最近我使用'pull',但是在我之前用''mtcars%>%filter(disp> 400))$ mpg' – AntoniosK

回答

2

我想我已經找出了原因。

當我打電話filter(mtcars, disp > 400)$mpg,什麼是真正發生的是:

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

同樣,mtcars %>% filter(disp > 400)$mpg被解釋爲:

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

,因爲%>% LHS將是功能的在RHS上的第一個參數。這再現了$需要2個參數,同時提供3個參數的錯誤。

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

該錯誤消息還驗證了上述推測。使用mtcars作爲數據幀名稱,並將filter(disp > 400)視爲列名:mtcars$filter(disp > 400)