3

Hadley の R4DS ブックを使用して tidyverse と purrr でループ処理を行っていますが、チルダ ~ 記号とピリオド記号の正確な使用法について少し混乱しています。

そのため、for ループを記述する場合、または map() を使用する場合、function() を記述する代わりに、~ の代わりにチルダ記号を使用できるようです。

これは for ループにのみ適用されますか?

以下のように...

models <- mtcars %>% 
  split(.$cyl) %>% 
  map(~lm(mpg ~ wt, data = .))

さらに、私が言われたピリオドは、「現在のリスト要素を参照するために」使用できます。しかし、私はそれが何を意味するのか混乱しています。つまり、ループする場合にのみ、ピリオドは、ループされているリスト内の要素を参照することを意味しますか? パイピングとどう違うの?パイプすると、1 行の結果が次のコード行にパイプされます。

上記の場合、mtcars は split() で 2 行目にパイプされますが、ピリオドが使用されます。なんで?

以下のケースは、私の混乱を要約しています。

x <- c(1:10)

detect(x, ~.x > 5)

最初の一致を見つける検出機能を使用して、私はちょうど使用できると思った

detect(x, x >5)

しかし、x >5 は関数ではないというエラーが表示されます。だから私はチルダを追加します

detect(x, ~ x > 5)

10ではなく、単一のTRUEまたはFALSEが必要であるというエラーが表示されます。したがって、ピリオドを追加すると

detect(x, ~.x >5) 

突然ループとして動作します。では、〜と の関係/使用法は何ですか。こちらでいかがでしょうか。単純な配管と比べて?

4

1 に答える 1