5

私はこれを理解することはできません。

library(dplyr)
dat <- data.frame(a = 1:5,b = rep(TRUE,5))

# this doesn't work
dat %>% all(.$b) # tricky

# this doesn't work
dat %>% all(b) # 

# this does
dat %>% .$b %>% all

all(.$b)うまくいかないのは紛らわしいと思います。それは私にはまったく直感的ではないようです。

4

1 に答える 1

6

さて、オペレーターは、次のルールを定義するパッケージ%>%から借用されます。magrittr

  1. デフォルトでは、左側 (LHS) は、右側 (RHS) に現れる関数の最初の引数としてパイプされます。
  2. 最初以外の位置で LHS が必要な場合は、ドット「.」をプレースホルダーとして使用できます。

この例では、データ フレーム全体がまだ最初のパラメーターとして渡されていることがわかります。

f<-function(...) str(list(...))
dat %>% f(.$b)
#  $ :'data.frame':       5 obs. of  2 variables:
#   ..$ a: int [1:5] 1 2 3 4 5
#   ..$ b: logi [1:5] TRUE TRUE TRUE TRUE TRUE
#  $ : logi [1:5] TRUE TRUE TRUE TRUE TRUE

したがって、data.frame と vector の両方を取得しています (関数は 2 つのパラメーターを受け取ります)。これは.、最初のパラメーター以外の位置に移動していないため、オブジェクトを最初のパラメーターとして渡すように動作を変更していないためだと思います。

このmagrittrような場合に使用する別の演算子がパッケージに含まれている場合があります。使用できます%$%

library(magrittr)
dat %$% all(b)
# [1] TRUE
于 2015-12-03T00:33:16.800 に答える