Подтвердить что ты не робот

Предупреждение о недопустимых аргументах при использовании min или max в reshape2

Я получаю следующее предупреждение, когда использую min или max в функции dcast из пакета reshape2. Что это говорит мне? Я не могу найти ничего, что объясняет предупреждающее сообщение, и я немного смущен тем, почему я получаю его, когда использую max, но не когда я использую средние или другие агрегатные функции.

Предупреждающее сообщение:
In.fun(.value [0],...): не пропущенных аргументов до min; возвращение Inf

Здесь воспроизводимый пример:

data(iris)

library(reshape2)

molten.iris <- melt(iris,id.var="Species")
summary(molten.iris)
str(molten.iris)
#------------------------------------------------------------
# Both return warning:
dcast(data=molten.iris,Species~variable,value.var="value",fun.aggregate=min)
dcast(data=molten.iris,Species~variable,value.var="value",fun.aggregate=max)

# Length looks fine though
dcast(data=molten.iris,Species~variable,value.var="value",fun.aggregate=length)

#------------------------------------------------------------
# No warning messages here:
aggregate(value ~ Species + variable, FUN=min, data=molten.iris)
aggregate(value ~ Species + variable, FUN=max, data=molten.iris)
#------------------------------------------------------------
# Or here:
library(plyr)

ddply(molten.iris,c("Species","variable"),function(df){
  data.frame(
    "min"=min(df$value),
    "max"=max(df$value)
    )
})
#------------------------------------------------------------
4b9b3361

Ответ 1

Вы получаете это предупреждение, потому что min/max применяются к числовому аргументу длины 0.

Это воспроизводит предупреждение.

min(numeric(0))
[1] Inf
Warning message:
In min(numeric(0)) : no non-missing arguments to min; returning Inf

Обратите внимание, что для mean вы не получите предупреждение:

mean(numeric(0))
[1] NaN

Это просто предупреждение, которое не имеет никакого эффекта при вычислении. Вы можете подавить его с помощью suppressWarnings:

 suppressWarnings(dcast(data=molten.iris,
                  Species~variable,value.var="value",
                  fun.aggregate=min))

ИЗМЕНИТЬ

Выше я просто отвечаю на вопрос: какой смысл предупреждения? и почему мы имеем этот min/max, а не со средней функцией. Вопрос, почему dcast применяет агрегатную функцию к вектору длины 0, это просто BUG, ​​и вы должны обратиться к поддерживающему пакет. Я думаю, что ошибка исходит из plyr::vaggregate функции, используемой внутри dcast,

plyr::vaggregate(1:3,1:3,min)
Error in .fun(.value[0], ...) : 
  (converted from warning) no non-missing arguments to min; returning Inf

Специально эта строка кода:

plyr::vaggregate
function (.value, .group, .fun, ..., .default = NULL, .n = nlevels(.group)) 
{
    ### some lines       
    ....
    ### Here I don't understand the meaning of .value[0]
    ### since vector in R starts from 1 not zeros!!!
    if (is.null(.default)) {
        .default <- .fun(.value[0], ...)
    }
    ## the rest of the function 
    .....
}