Когда max(x, na.rm = TRUE)
вызывается без значений NA
, он возвращает -Inf
с предупреждением. Однако в некоторых случаях функция summarise
в dplyr
не возвращает предупреждение:
library(magrittr)
library(dplyr)
df1 <- data.frame(a = c("a","b"), b = c(NA,NA))
df1 %>% group_by(a) %>% summarise(x = max(b, na.rm = TRUE))
# Three warnings, as expected.
df2 <- data.frame(a = c("a","b"), b = c(1,NA))
df2 %>% group_by(a) %>% summarise(x = max(b, na.rm = TRUE))
# No warning. Unexpected.
Интересно, если я переименую функцию, я получу предупреждения, как ожидалось:
# Pointer to same function.
stat <- max
df1 <- data.frame(a = c("a","b"), b = c(NA,NA))
df1 %>% group_by(a) %>% summarise(x = stat(b, na.rm = TRUE))
# Three warnings, as expected.
df2 <- data.frame(a = c("a","b"), b = c(1,NA))
df2 %>% group_by(a) %>% summarise(x = stat(b, na.rm = TRUE))
# Single warning, as expected.
На самом деле, я думаю, это должно быть два предупреждения вместо трех, потому что для summarise
есть только две группы. Но я не уверен, как работает система внутреннего предупреждения, поэтому возможно три предупреждения, как и ожидалось.
Мой вопрос: почему summarise
не выводит предупреждение в определенных случаях, и если это ожидается, почему простое переименование функции изменит это поведение?
Мой sessionInfo()
:
R version 3.3.2 (2016-10-31)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 14.04.5 LTS
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] dplyr_0.5.0.9000 magrittr_1.5
loaded via a namespace (and not attached):
[1] lazyeval_0.2.0.9000 R6_2.2.0 assertthat_0.1
[4] tools_3.3.2 DBI_0.5-1 tibble_1.2
[7] Rcpp_0.12.8
Хотя я использую версию "dev" dplyr
, я также тестировал ее на версии, доступной в CRAN, с теми же результатами.