使用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
相关产品推荐
相关产品推荐

