首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在R中使用summarySE函数时,如何抑制只有一个观察值的分组的NaN值的警告消息?

在R中使用summarySE函数时,如何抑制只有一个观察值的分组的NaN值的警告消息?
EN

Stack Overflow用户
提问于 2021-02-18 19:11:14
回答 1查看 247关注 0票数 0

我正在创建一个使用summarySE函数的仪表板。到目前为止,这是按预期工作的,但我注意到,当在使用分组的表上使用此函数时,控制台窗口会产生错误消息,该分组至少包含一个组,其中只有一个观察值。(这会导致SD、SE和CI出现故障。)

有没有办法抑制此实例导致的错误消息?这不是我所关心的事情,因为我预计会有一些这样的小分组,但我不希望产生错误消息,除非我需要实际调查一些东西。

举个例子。

代码语言:javascript
运行
复制
summarySE(head(iris),measurevar='Sepal.Width', groupvars=('Petal.Length'))

只有一个分组(Petal.Length = 1.4)有多个观察值。NA是在其他组的相关统计数据下产生的,只有一个观察值。上面的函数给出了以下输出:

代码语言:javascript
运行
复制
  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值,但在这种情况下,我似乎没有注意到这一点。

有谁知道如何抑制这个错误吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-18 21:43:36

正如警告消息中指出的,这是由于只要自由度为1,qt()函数就会给出NaN。您可以在自己的函数summarySE副本中的qt()上使用suppressWarnings(),如下所示。

代码语言:javascript
运行
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66258783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档