Reshape2パッケージのdcast関数でminまたはmaxを使用すると、次の警告が表示されます。それは私に何を伝えていますか?警告メッセージを説明するものは何も見つかりません。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)
)
})
#------------------------------------------------------------
この警告は、長さ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))
上記の質問に答えているだけです:警告の意味は何ですか?そして、なぜ平均関数ではなくこの最小/最大があるのか。なぜdcast
が長さ0のベクトルに集約関数を適用するのかという質問です。これは単なるバグであり、パッケージメンテナに連絡する必要があります。エラーは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
.....
}