当我在reshape2包中使用dcast函数的min或max时,我会收到以下警告信息。这是在告诉我什么?我找不到任何解释警告信息的内容,我有点困惑,不知道为什么在使用max时会出现这个警告,而在使用平均值或其他聚合函数时却没有。
警告信息:
在 .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)
)
})
#------------------------------------------------------------
min
或max
会出现该警告,但使用mean
不会,原因在于mean
应用于长度为0的向量时不会抛出警告。如果执行dcast(data=molten.iris,Species~variable,value.var="value", function(x) {print(x); min(x)})
,你将看到第一个x
是长度为0的数字向量。由于在默认情况下dcast
中fill=NULL
,因此min
被应用于长度为0的向量并产生了警告。问题是为什么存在这种结构模式,即返回的第一个元素是长度为0的向量...不知道为什么会发生这种情况,因为所有因子组合似乎都存在。 - konvas