を生成しながらDplyrがNaNを生成し、次の玩具データ及び計算を検討:ベースRはNA
library(dplyr)
df <- tibble(x = 1)
stats::sd(df$x)
dplyr::summarise(df, sd_x = sd(x))
計算はsummarise
をNaN
を生成dplyr関数に含まれている第二のに対しNA
における最初の計算結果、。私は両方の計算が同じ結果を生み出すことを期待しています。なぜ彼らは異なるのでしょうか?
を生成しながらDplyrがNaNを生成し、次の玩具データ及び計算を検討:ベースRはNA
library(dplyr)
df <- tibble(x = 1)
stats::sd(df$x)
dplyr::summarise(df, sd_x = sd(x))
計算はsummarise
をNaN
を生成dplyr関数に含まれている第二のに対しNA
における最初の計算結果、。私は両方の計算が同じ結果を生み出すことを期待しています。なぜ彼らは異なるのでしょうか?
これは別の機能を呼び出しています。私は機能が何であるかはっきりしないが、それはstats
ではない。
dplyr::summarise(df, sd_x = sd(x))
# A tibble: 1 x 1
sd_x
<dbl>
1 NaN
しかし、ここで呼ばれる:ここで呼び出されることはありません
dplyr::summarise(df, sd_x = stats::sd(x))
# A tibble: 1 x 1
sd_x
<dbl>
1 NA
debugonce(sd) # debug to see when sd is called
dplyr::summarise(df, sd_x = stats::sd(x))
debugging in: stats::sd(1)
debug: sqrt(var(if (is.vector(x) || is.factor(x)) x else as.double(x),
na.rm = na.rm))
...
更新
ほのめかし、summarise
内sd
はRの外で計算されることを表示されます〜でこのヘッダーファイルの中で:https://github.com/tidyverse/dplyr/blob/master/inst/include/dplyr/Result/Sd.h
多くの関数はdplyrによって再定義されているようです。 var
が両方のケースで同じ結果を与えることを考えれば、sdの振る舞いはバグだと思う。
「NaNとInfの違いは何ですか?またRのNULLとNAは違いますか?」(https://stackoverflow.com/questions/15496361/what-is-the-difference-between-nan-and) -inf-and-null-and-na-in-r) – PoGibas
私は複製できます。 dplyrバージョン0.7.4 - CRANの最新バージョン –
同じです。しかし、何のためにそれが必要ですか? 'is.na()'と尋ねると、両方とも 'TRUE'を返します。 – loki