dcast - funcion melt en r
No hay argumentos no perdidos. Advertencia cuando se usa min o max en reshape2 (1)
Recibo la siguiente advertencia cuando uso min o max en la función de difusión del paquete reshape2. ¿Qué me está diciendo? No puedo encontrar nada que explique el mensaje de advertencia y estoy un poco confundido acerca de por qué lo obtengo cuando uso max pero no cuando uso media u otras funciones agregadas.
Mensaje de advertencia:
En .fun (.value [0], ...): no hay argumentos no faltantes para min; regresando inf
Aquí hay un ejemplo reproducible:
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)
)
})
#------------------------------------------------------------
Obtendrá esta advertencia porque los valores mínimo / máximo se aplican a un argumento de longitud 0 numérico.
Esto reproduce la advertencia.
min(numeric(0))
[1] Inf
Warning message:
In min(numeric(0)) : no non-missing arguments to min; returning Inf
Tenga en cuenta que por el momento no recibe la advertencia:
mean(numeric(0))
[1] NaN
Es solo una advertencia que no tiene ningún efecto en el cálculo. Puedes suprimirlo mediante la suppressWarnings
:
suppressWarnings(dcast(data=molten.iris,
Species~variable,value.var="value",
fun.aggregate=min))
EDITAR
Arriba, solo estoy respondiendo la pregunta: ¿Cuál es el significado de la advertencia? y por qué tenemos este mínimo / máximo y no con función media. La pregunta de por qué dcast
está aplicando la función agregada a un vector de longitud 0, es solo un error y debe ponerse en contacto con el encargado del paquete. Creo que el error proviene de la función plyr::vaggregate
utilizada internamente por dcast
,
plyr::vaggregate(1:3,1:3,min)
Error in .fun(.value[0], ...) :
(converted from warning) no non-missing arguments to min; returning Inf
Especialmente esta línea de código:
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
.....
}