我正在创建一个使用summarySE函数的仪表板。到目前为止,这是按预期工作的,但我注意到,当在使用分组的表上使用此函数时,控制台窗口会产生错误消息,该分组至少包含一个组,其中只有一个观察值。(这会导致SD、SE和CI出现故障。)
有没有办法抑制此实例导致的错误消息?这不是我所关心的事情,因为我预计会有一些这样的小分组,但我不希望产生错误消息,除非我需要实际调查一些东西。
举个例子。
summarySE(head(iris),measurevar='Sepal.Width', groupvars=('Petal.Length'))
只有一个分组(Petal.Length = 1.4)有多个观察值。NA是在其他组的相关统计数据下产生的,只有一个观察值。上面的函数给出了以下输出:
Petal.Length N Sepal.Width sd se ci
1 1.3 1 3.200000 NA NA NA
2 1.4 3 3.366667 0.321455 0.1855921 0.7985386
3 1.5 1 3.100000 NA NA NA
4 1.7 1 3.900000 NA NA NA
Warning message:
In qt(conf.interval/2 + 0.5, datac$N - 1) : NaNs produced
我知道有一个na.rm参数,您可以将其设置为TRUE/FALSE来忽略NA值,但在这种情况下,我似乎没有注意到这一点。
有谁知道如何抑制这个错误吗?
发布于 2021-02-18 21:43:36
正如警告消息中指出的,这是由于只要自由度为1,qt()
函数就会给出NaN
。您可以在自己的函数summarySE
副本中的qt()
上使用suppressWarnings()
,如下所示。
summarySE <- function(data=NULL, measurevar, groupvars=NULL, na.rm=FALSE,
conf.interval=.95, .drop=TRUE) {
library(plyr)
# New version of length which can handle NA's: if na.rm==T, don't count them
length2 <- function (x, na.rm=FALSE) {
if (na.rm) sum(!is.na(x))
else length(x)
}
# This does the summary. For each group's data frame, return a vector with
# N, mean, and sd
datac <- ddply(data, groupvars, .drop=.drop,
.fun = function(xx, col) {
c(N = length2(xx[[col]], na.rm=na.rm),
mean = mean (xx[[col]], na.rm=na.rm),
sd = sd (xx[[col]], na.rm=na.rm)
)
},
measurevar
)
# Rename the "mean" column
#datac <- plyr::rename(datac, c("mean" = measurevar))
names(datac)[names(datac) == 'mean'] <- measurevar
datac$se <- datac$sd / sqrt(datac$N) # Calculate standard error of the mean
# Confidence interval multiplier for standard error
# Calculate t-statistic for confidence interval:
# e.g., if conf.interval is .95, use .975 (above/below), and use df=N-1
ciMult <- suppressWarnings(qt(conf.interval/2 + .5, datac$N-1))
datac$ci <- datac$se * ciMult
return(datac)
}
summarySE(head(iris),measurevar='Sepal.Width', groupvars='Petal.Length', na.rm=TRUE, .drop=TRUE)
https://stackoverflow.com/questions/66258783
复制相似问题