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

使用prcomp执行PCA遇两类报错,求解决方案

R语言prcomp执行PCA的两类问题解决方案

一、XLSX数据集列类型为字符导致colMeans报错

问题说明

导入自有XLSX数据集后,PCA_Input虽为数据框结构,但所有列实际是字符类型,触发Error in colMeans(x, na.rm = TRUE) : 'x' must be numeric报错。

解决方案

1. 导入时直接指定数值列类型(推荐)

利用read_xlsx的col_types参数,提前定义列类型,避免后续转换:

library(readxl)
# 先获取原文件列数,前6列为非数值列,剩余设为数值型
total_cols <- ncol(read_xlsx("C:/Users/i5/Desktop/TCGA MERGED Desktop.xlsx"))
DATASET_PCA_MERGED <- read_xlsx(
  "C:/Users/i5/Desktop/TCGA MERGED Desktop.xlsx",
  col_types = c(rep("text", 6), rep("numeric", total_cols - 6))
)
PCA_Input <- DATASET_PCA_MERGED[, -c(1,2,3,4,5,6)]
myPr <- prcomp(PCA_Input, scale = TRUE)

2. 导入后批量转换字符列为数值(保留数据框结构)

如果已经导入数据,用以下方法批量转换,同时保持数据框格式:

# Base R 方法
PCA_Input[] <- lapply(PCA_Input, as.numeric)

# dplyr 方法(需加载dplyr包)
library(dplyr)
PCA_Input <- PCA_Input %>% mutate_all(as.numeric)

注意:若列中存在非数值字符,转换后会生成NA,需用na.omit(PCA_Input)或指定替换值处理。

二、TXT数据集存在无穷值导致svd报错

问题说明

数据中存在无穷值,触发Error in svd(x, nu=0, nv=k) : Infinite or missing values in 'x',且原检测无穷值的方法错误。

解决方案

1. 正确定位无穷值

替换错误的sapply用法,用以下代码检测:

# 检测每列是否包含无穷值
col_has_inf <- sapply(PCA, function(col) any(is.infinite(col)))
# 输出含无穷值的列名
cat("存在无穷值的列:", names(col_has_inf)[col_has_inf], "\n")

# 查看所有无穷值的具体位置(行号+列号)
inf_positions <- which(is.infinite(PCA), arr.ind = TRUE)
print(inf_positions)

2. 处理无穷值(无需依赖外部文件)

方法1:替换为NA后删除缺失值
# 将所有无穷值替换为NA
PCA[is.infinite(PCA)] <- NA
# 删除含NA的行(或用subset删除列,根据需求选择)
PCA_clean <- na.omit(PCA)
# 执行PCA
myPr <- prcomp(PCA_clean, scale = TRUE)
方法2:替换为列的有限极值

如果不想删除数据,可将无穷值替换为对应列的最大/最小有限值:

PCA_clean <- PCA
for(col in colnames(PCA_clean)){
  col_data <- PCA_clean[[col]]
  # 获取列中的最大有限值(排除inf和NA)
  finite_max <- max(col_data[!is.infinite(col_data)], na.rm = TRUE)
  # 替换inf为该值
  PCA_clean[[col]][is.infinite(col_data)] <- finite_max
}
myPr <- prcomp(PCA_clean, scale = TRUE)

补充:原代码中na.omit(LGG_EXP)未赋值,需修正为LGG_EXP <- na.omit(DATASET)后再提取PCA列。

内容的提问来源于stack exchange,提问作者Guilherme Afonso Vergara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 17:55:29