2017-07-19 5 views
1

データの列やリスト内の項目など、magrittrでドット( "。")を使ってデータのコンポーネントに関数を適用する方法は明確ではありません。"。"からのデータのコンポーネントへのアクセス。 (dot)演算子

例:

> 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があなたの例で示したように)、ドットは最初の引数として追加的に与えられません。例えば、 "%">%setNames(。) 'は' setNames( "A"、 "A") 'と等価ではなく、実際には失敗します。 https://github.com/tidyverse/magrittr/issues/128(ああ、ちょうどMrFlickがそれをカバーするコメントを編集したことに気付きましたが、ここでコメントしておきます) – Frank

関連する問題