You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用dplyr::summarise调用fitdist时触发dnorm() NaN警告,单独调用无此问题

解决fitdistrplus::fitdist在dplyr::summarise中产生NaN警告的问题

问题根源

在dplyr::summarise()中传递给fitdist()的数据是带有dplyr特定属性的向量(而非标准numeric类型),这会导致fitdist()内部调用分布密度函数(如dnorm())时,出现临时的无效参数计算(比如参数超出分布函数的有效范围),进而触发NaN警告。直接调用fitdist()时,数据是普通numeric向量,因此不会出现该问题。

解决方案

在调用fitdist()前,将输入数据强制转换为普通numeric向量,移除dplyr附带的额外属性。

修改后的代码

suppressPackageStartupMessages(library(dplyr))
library(fitdistrplus)

fun <- function(data, distr = "norm"){
  # 转换为标准numeric向量
  data <- as.numeric(data)
  fitdist(
        data = data,
        distr = distr,
        keepdata = FALSE, method = "mme"
      )

return(1)
}

# summarise调用不再产生警告
tibble(x = rnorm(100)) |>
  summarise(fun(x))

# 直接调用依然正常
fun(tibble(x = 1:100)$x)

原理说明

as.numeric()会剥离dplyr向量的特殊属性,让fitdist()处理标准的numeric类型数据,避免内部计算流程因属性干扰生成无效参数,从根源上消除NaN警告。相比用suppressWarnings()掩盖警告的临时方案,这种方法能保留对其他潜在问题的警告提示,更安全可靠。

内容的提问来源于stack exchange,提问作者Richard Telford

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 15:37:02