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

计算生物地理区域寄生虫系统发育多样性遇lm.fit报错求助

寄生虫多样性计算报错排查与解决

错误核心原因

Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : NA/NaN/Inf in 'y' 明确指向多样性计算流程中,线性拟合的因变量y存在缺失值、非数值或无穷值,且仅在特定属的处理中触发,说明该属的site_plas_matt矩阵或对应树分支数据存在异常。

分步排查方案

  • 检查目标属的捕获次数矩阵

    1. 直接扫描异常值:执行以下代码验证矩阵内容
      any(is.na(site_plas_matt))
      any(is.infinite(site_plas_matt))
      any(is.nan(site_plas_matt))
      any(site_plas_matt < 0) # 捕获次数不可能为负,负数值会导致后续计算异常
      
    2. 排查全零行/列:若某单倍型在所有区域的捕获次数均为0,后续计算(如对数转换、倒数运算)会产生Inf或NaN,执行代码定位:
      rowSums(site_plas_matt) == 0 # 若行是单倍型
      colSums(site_plas_matt) == 0 # 若列是单倍型
      
  • 追溯Clark代码的多样性计算逻辑

    1. 定位调用lm.fit的代码段,确认y变量的来源:通常是系统发育多样性(PD)、标准化效应量(SES-PD)等统计量
    2. 检查y变量的生成过程:
      • 是否存在对0值的对数/除法操作?比如log(0)会生成-Inf,1/0会生成Inf
      • 验证对应属的树分支长度:即使树处理代码正常运行,也可能存在该属分支长度为0或NA的情况,执行代码检查:
        sum(is.na(plas_trees_reduced$edge.length))
        sum(plas_trees_reduced$edge.length == 0)
        
  • 补全数据预处理遗漏步骤

    1. 确认矩阵转换后的类型:用class(site_plas_matt)检查是否为数值型矩阵,避免字符型数据隐式转换生成NA
    2. 验证零值列移除后的维度:用dim(site_plas_matt)确认该属仍有有效数据行/列,避免误删全部数据

临时修复方案

  1. 若为零值导致的计算异常,在多样性计算前对矩阵做微小偏移:
    site_plas_matt[site_plas_matt == 0] <- 1e-8 # 避免对数/除法产生无穷值
    
  2. 若为树分支长度异常,补全或修正分支长度:
    # 替换NA分支长度为0(或根据系统发育逻辑设置最小分支长度)
    plas_trees_reduced$edge.length[is.na(plas_trees_reduced$edge.length)] <- 0
    

内容的提问来源于stack exchange,提问作者Katrina Keith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 23:19:49