考虑以下玩具数据和计算:
library(dplyr)
df <-  tibble(x = 1)
stats::sd(df$x)
dplyr::summarise(df, sd_x = sd(x))
第一个计算结果,NA而第二个,当计算包含在dplyr函数中时summarise产生NaN.我希望两个计算都能产生相同的结果,我想知道为什么它们有所不同?
它正在调用一个不同的功能.我不清楚这个功能是什么,但它不是那个stats.
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 = sd(x))
# A tibble: 1 x 1
   sd_x
  <dbl>
1   NaN
但在这里打电话:
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))
...
更新
似乎sd内部summarise在R之外计算,在此头文件中暗示:https://github.com/tidyverse/dplyr/blob/master/inst/include/dplyr/Result/Sd.h 
dplyr似乎重新定义了许多函数.鉴于var在两种情况下给出相同的结果,我认为sd行为是一个错误.
| 归档时间: | 
 | 
| 查看次数: | 422 次 | 
| 最近记录: |