Когда max(x, na.rm = TRUE)
вызывается без значений NA
, он возвращает -Inf
с предупреждением. Однако, в некоторых случаях summarise
функция dplyr
не возвращает предупреждение:подведение итогов не возвращает предупреждения от max, если значения не-NA
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, с теми же результатами.
Похож на ошибку в 'group_by' для меня как' summaryise' дает ожидаемый результат без него. Кроме того, 'mutate' не возвращает предупреждение ни для вашего второго случая. –
Кроме того, во втором случае вы получаете 'NA' вместо' -Inf', что означает, что проблема накапливается где-то перед предупреждением –
Хороший улов. 'df2%>% group_by (a)%>% summary (length (na.omit (b)))' похоже, подтверждает, что группа 'b' передает вектор нулевой длины в' max() ' – smci