2017-07-19 72 views
1

我不清楚如何將函數應用於使用點(「。」)與magrittr數據的組件,如數據列或列表中的項目。訪問「。」中的數據組件(點)運算符與magrittr

例子:

> data.frame(x = 1:10, y = 11:20) %>% .$y 
[1] 11 12 13 14 15 16 17 18 19 20 

似乎訪問數據應該工作一樣應用功能,但它並不:

> data.frame(x = 1:10, y = 11:20) %>% min(.$y) 
[1] 1 

回答

3

的data.frame會被傳遞第一個參數,除非在呼叫中的其他位置放置一個單獨的點。

data.frame(x = 1:10, y = 11:20) %>% min(.$y) 

相同

dd <- data.frame(x = 1:10, y = 11:20) 
min(dd, dd$y) 
# [1] 1 

This is by design

你將不得不使用一個代碼塊

data.frame(x = 1:10, y = 11:20) %>% {min(.$y)} 
+0

感謝。我很好奇,那麼,爲什麼data.frame(x = 1:10,y = 11:20)%>%。$ y沒有給出類似data.frame(dd,dd $ y)的東西。另外,我的第一個例子不包含「在通話中的其他地方放置的孤獨點」嗎? – jzadra

+0

因爲'。$ y'相當於'''(。,y)',它已經把data.frame放在了你想要的地方。你也可以使用'%>%'$'(y)'而不用點。這實際上更多的不是進入嵌套調用而不是「孤獨點」,所以我在那裏有點不準確。 – MrFlick

+1

@jzadra Btw,當''出現顯式地作爲函數的參數時,有一些與magrittr的行爲相關的奧祕。也就是說,如果它是函數的獨立參數(如MrFlick在您的示例中顯示的那樣),則不會將該點另外作爲第一個參數給出。因此,例如'「A」%>%setNames(。)'不等同於'setNames(「A」,「A」)',實際上失敗了。 https://github.com/tidyverse/magrittr/issues/128(哦,剛纔注意到MrFlick編輯了這個評論,任何人,我會在這裏留下這個評論。) – Frank