Ik krijg de volgende waarschuwing wanneer ik min of max in de Dcast-functie van het Reshape2-pakket gebruik. Wat vertelt het mij? Ik kan niets vinden dat het waarschuwingsbericht verklaart en ik ben een beetje in de war over waarom ik het krijg als ik Max gebruik, maar niet wanneer ik gemiddelde of andere geaggregeerde functies gebruik.
Waarschuwingsbericht:
in .fun (.Value [0], …): Geen niet-ontbrekende argumenten aan Min; retourneren van INF
Hier is een reproduceerbaar voorbeeld:
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)
)
})
#------------------------------------------------------------
Antwoord 1, Autoriteit 100%
U krijgt deze waarschuwing omdat de min / max wordt toegepast op numeriek van lengte 0-argument.
Dit reproduceert de waarschuwing.
min(numeric(0))
[1] Inf
Warning message:
In min(numeric(0)) : no non-missing arguments to min; returning Inf
Merk op dat voor mean
U krijgt niet de waarschuwing:
mean(numeric(0))
[1] NaN
Het is slechts een waarschuwing die geen effect heeft in de berekening. U kunt het onderdrukken met suppressWarnings
:
suppressWarnings(dcast(data=molten.iris,
Species~variable,value.var="value",
fun.aggregate=min))
Bewerken
Hierboven beantwoord ik gewoon de vraag: wat is de betekenis van de waarschuwing? en waarom we deze min / max en niet met gemiddelde functie hebben. De vraag waarom dcast
de geaggregeerde functie toepast op een vector van lengte 0, het is slechts een bug en u moet contact opnemen met de pakkethouder. Ik denk dat de fout afkomstig is van plyr::vaggregate
functie intern gebruikt door dcast
,
plyr::vaggregate(1:3,1:3,min)
Error in .fun(.value[0], ...) :
(converted from warning) no non-missing arguments to min; returning Inf
Speciaal deze regel 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
.....
}