2016-09-03 4 views
7

を私が行う場合:dplyr :: nが() "エラー:この関数は直接呼び出すことはできません" を返し

dplyr::mutate(MeanValue = mean(RSSI), ReadCount = n()) 

すべてが正常に動作します。 しかし、私は機能資格をしようとすると:

dplyr::mutate(MeanValue = mean(RSSI), ReadCount = dplyr::n()) 

を私はタイトルに記載されたエラーを取得します。

私は本当に問題はありません。私はそれを避けることができますが、なぜそれが起こるのか不思議です。私はもう別の質問(dplyr: "Error in n(): function should not be called directly")を見ましたが、私が知る限り、私が使用している唯一のライブラリはdplyrです。私は答えはとにかく示唆して何をしようとしたが、

Error in detach(package:plyr) : invalid 'name' argument and

conflicts() 

detach(package:plyr) 

結果は、n()に言及していない:私はないんだけど、私は推測する

[1] "filter" "lag" "body<-" "intersect" "kronecker" "setdiff" "setequal" "union"
, most of which is cause by dplyr.

をこれだけ混乱しているのは1つだけ?

function() { 
    stop("This function should not be called directly") 
} 

完全修飾形式は、このエラーが発生理由です:関数は常にエラーを返します

+0

新しいセッションでは、 '?n'の例が私に役立ちます。 –

+5

dplyrの 'n'は内部関数にマップされているようですが(https://github.com/hadley/dplyr/blob/master/src/dplyr.cpp#L445)、' dplyr :: n'はできません等しく扱われ、-error -R関数を呼び出すだけです。 –

+3

はい、 'n'はR関数ではなく、それを解釈する方法を知っているC関数に渡される' summarize'、 'mutate'などの引数と考えるのがよいでしょう。 –

答えて

10

So, I do not really have a problem, I can just avoid [writing dplyr::n() ], but I'm curious about why it even happens.

ここdplyr 0.5.0でdplyr::nのソースコードです。 (私の推測では、n()を例に、典型的なドキュメントページを持つことができるようにエラースロー機能dplyr::nが存在することである。)

filter/mutate/summarise文の内部では、n()は、この関数を呼び出していません。代わりに、一部の内部関数は式n()のグループサイズを計算します。ここで

n() 
#> Error: could not find function "n" 

library(magrittr) 
iris %>% 
    dplyr::group_by(Species) %>% 
    dplyr::summarise(n = n()) 
#> # A tibble: 3 × 2 
#>  Species  n 
#>  <fctr> <int> 
#> 1  setosa 50 
#> 2 versicolor 50 
#> 3 virginica 50 

n()機能にマッピングすることができないので、我々は、エラーを取得:dplyrがロードされていない、次の作品が理由です。しかし、それをダブル動詞の内部で使うと、n()は何かにマップされ、グループサイズを返します。

+1

さて、私はまだこのデザインを理解していませんが、それはまだ答えです。 ;) – Silverclaw

関連する問題