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

使用prcomp()函数报错“infinite or missing values in 'x'”的技术求助

解决prcomp()报错"infinite or missing values in 'x'"的问题

你的代码存在两个核心问题触发报错,以下是具体分析和解决方案:

1. 错误破坏了矩阵结构

执行exprs<- as.numeric(exprs)后,转置后的样本×特征矩阵被强制转换成了一维数值向量,而prcomp()要求输入为矩阵或数据框(行对应样本、列对应特征),向量无法满足PCA的分析结构要求。

2. 未排查真实的缺失/无穷值

即使确认数据是double类型,仍可能存在NA、NaN或Inf这类异常值,这才是报错的直接诱因。

修正步骤:

  • 恢复矩阵格式:删除exprs<- as.numeric(exprs)这一行,转置后直接保留矩阵结构。
  • 检测异常值:运行以下代码定位问题:
    # 检查是否存在NA/NaN
    any(is.na(exprs))
    any(is.nan(exprs))
    # 检查是否存在无穷值
    any(is.infinite(exprs))
    
  • 清理异常值:根据检测结果选择处理方式:
    • 若仅少量异常值,可删除对应样本或特征:
      # 删除含NA/Inf的样本行
      exprs_clean <- exprs[!apply(exprs, 1, function(x) any(is.na(x) | is.infinite(x))), ]
      # 或删除含NA/Inf的特征列
      exprs_clean <- exprs[, !apply(exprs, 2, function(x) any(is.na(x) | is.infinite(x)))]
      
    • 若存在大量异常值,需回溯上游数据导入或预处理流程,确认数据生成环节是否出错。

修正后的完整代码示例:

Eset<-ExpressionSet(as.matrix(exp))
pData(Eset)<-meta
featureData(Eset) <- as(feat,"AnnotatedDataFrame")

exprs<- Biobase::exprs(Eset)
exprs<-t(exprs) # 保持样本×特征的矩阵格式

# 检测并清理异常值
any(is.na(exprs))
any(is.infinite(exprs))
exprs_clean <- exprs[!apply(exprs, 1, function(x) any(is.na(x) | is.infinite(x))), ]

# 执行PCA分析
PCA <- prcomp(exprs_clean, scale = FALSE)

内容的提问来源于stack exchange,提问作者N Tmz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:30:59