web-dev-qa-db-fra.com

Aucun avertissement non manquant lors de l'utilisation de min ou max dans reshape2

J'obtiens l'avertissement suivant lorsque j'utilise min ou max dans la fonction dcast du package reshape2. Qu'est-ce que ça me dit? Je ne trouve rien qui explique le message d'avertissement et je suis un peu confus quant à la raison pour laquelle je l'obtiens lorsque j'utilise max mais pas lorsque j'utilise mean ou d'autres fonctions d'agrégation.

Message d'alerte:
En .fun (.value [0], ...): aucun argument non manquant à min; retour Inf

Voici un exemple reproductible:

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)
    )
})
#------------------------------------------------------------
32
Tumbledown

Vous obtenez cet avertissement car les valeurs min/max sont appliquées à un argument numérique de longueur 0.

Cela reproduit l'avertissement.

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

Notez que pour mean vous ne recevez pas l'avertissement:

mean(numeric(0))
[1] NaN

C'est juste un avertissement qui n'a aucun effet sur le calcul. Vous pouvez le supprimer en utilisant suppressWarnings:

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

MODIFIER

Ci-dessus, je réponds simplement à la question: quelle est la signification de l'avertissement? et pourquoi nous avons ce min/max et non avec une fonction moyenne. La question de savoir pourquoi dcast applique la fonction d'agrégation à un vecteur de longueur 0, c'est juste un BUG et vous devez contacter le responsable du package. Je pense que l'erreur vient de plyr::vaggregate fonction utilisée en interne par dcast,

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

Surtout cette ligne de code:

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 
    .....
}
40
agstudy