2017-07-27 3 views
3

パイプとpurrrのmap()関数の両方を使用すると、データと変数の引き渡し方法がわかりません。例えば、このコードは、私が期待どおりに動作しますパイプはどのようにpurrr map()関数と "。"関数で動作しますか? (ドット)記号

library(tidyverse) 

cars %>% 
    select_if(is.numeric) %>% 
    map(~hist(.)) 

をしかし、私はggplotを使用して似たようなしようとすると、それは奇妙な方法で動作します。

cars %>% 
    select_if(is.numeric) %>% 
    map(~ggplot(cars, aes(.)) + geom_histogram()) 

私はこれが "この場合、列名が必要なaes()にベクトルを渡しています。いずれにしても、パイプとmap()を使用して、各数値列をggplot関数に渡すことができたらと思います。前もって感謝します!

+0

あなたはまた、試みることができる '車%>% select_if(is.numeric)%>% マップ(〜qplot(。))ggplots'迅速なプロットが非推奨と考えられているが、'、私は思います。 – lukeA

答えて

6
cars %>% 
    select_if(is.numeric) %>% 
    map2(., names(.), 
     ~{ggplot(data_frame(var = .x), aes(var)) + 
      geom_histogram() + 
      labs(x = .y)     }) 

enter image description here

enter image description here

のためにいくつかの余分な手順があります。

  • mapの代わりにmap2を使用してください。最初の引数は渡しているデータフレームで、2番目の引数はそのデータフレームのnamesのベクトルなので、mapを越えるものを知っています。
  • ggplotはデータフレームと強要可能なオブジェクトでのみ動作するため、データを明示的にフレーム化する必要があります。
  • これにより、プロットの名前を示す.y代名詞にアクセスすることもできます。
8

生データを美的マッピングに渡すことはできません。代わりに、data.frameを動的に構築する必要があります。例

cars %>% 
    select_if(is.numeric) %>% 
    map(~ggplot(data_frame(x=.), aes(x)) + geom_histogram()) 
+0

私はこのアプローチがうまくいくのには驚きましたが、データフレームは実際にベクトルのリストなので、意味があると思います。 – Brian

+0

私はこれの簡潔さが好きです。 'map2'に頼らずにx軸のタイトルを追加する方法はありますか?あるいは、それぞれの人を傷つけるのですか? "名前のない数値ベクトルとしての反復?ありがとう!! –

+1

ああ、purrrは名前に沿って渡されません。 map2と同じように明示的に渡す必要があります – MrFlick

関連する問題