2017-12-30 30 views
3

私はdplyrの理解に問題があることを示す学問的な演習を行っています。ベースRの構文を使用して虹彩データセットを再構成しましょう:dplyr配管は、同じコードを使用するベースR構文とは異なる結果を生成します

library(dplyr) 

bind_cols(iris[1], iris[-1]) 

OK、これは機能します。さて、私はすべてをdplyrでパイプします - そしてそれは虹彩データセットのすべての列を2倍にします。これらの2つのコードは同じ結果をもたらすべきではありませんか?

iris %>% bind_cols(.[1], .[-1]) 
+5

サブセットのように何かを行うと、上記の2番目の例のように、最初のパラメータとして渡されます。変更されていない '.'をパラメータに渡すと、それはそのパラメータにのみ渡されます。 '100%>%rnorm(10、平均=。)'である。最初のパラメータに渡されないようにするには、式をカッコで囲みます。 'iris%>%{bind_cols(。[1]、。[ - 1])}}'で指定された場合にのみ渡されます。 – alistaire

+0

それはそれを説明します。ありがとうございました。 – stackinator

答えて

3

以下を参照してください。 iris %>% bind_cols(.[1], .[-1])bind_colsの最初の引数が%>%より前のものであるため、bind_cols(iris, iris[1], iris[-1])と同じです。だから結果は私には意味がある。

aa <- iris %>% bind_cols(.[1], .[-1]) 

bb <- bind_cols(iris, iris[1], iris[-1]) 

identical(aa, bb) 
# [1] TRUE 
+4

ニース。そして、 '虹彩%>%{bind_cols(。[1]、。[ - 1])}}'はbind_cols(iris [1]、iris [-1])と同じものを生成します。 – Tino

+0

@Tino共有してくれてありがとう。私は前に '{'の使用を知らなかった。 – www

+3

私は何かをプロットしたいときに同じデータに基づいてテーブルを印刷すると便利です: '%df%T>%{print(ggplot()+ ...)}%>%...' T>% 'は' magrittr'からの派手なパイプ分割です。 – Tino

関連する問題