直接看 rstudio里面的 rds 数据 无法看到 expr 表达矩阵的详细数据 ,有什么办法呢
在RStudio里“看不见”expr表达矩阵的常见原因只有两类:
- 对象太大,RStudio的Viewer/Environment面板自动截断;
- 对象并不是真正的matrix/data.frame,而是嵌在List/S4对象里的slot或元素。
只要先确认“它到底藏在哪”,再把它拆成真正的矩阵即可。下面给一套“三步排查+两种导出”做法,基本能搞定所有类似情况。
方法一
GSE32967_raw <- readRDS(“K:/download/geo/raw_data/GSE32967_raw.rds”)
expr <- GSE32967_raw$expr
View(expr)
方法2 转成csv
- 先搞清楚对象结构
# 把rds读进来
obj <- readRDS("your_file.rds")# 看顶层类型
str(obj, max.level = 2, give.attr = FALSE)# 如果是S4
showMethods(class = class(obj)) # 看有什么提取器
slotNames(obj) # 看slot名字# 如果是普通list
names(obj)
90%的情况下expr矩阵要么叫expr、exprs、assay,要么藏在assays()、slot(obj,“assay”)、obj[[“expr”]]里。
- 把表达矩阵“抠”出来
下面给出4句最常用提取模板,按对象类型直接套:
a) 纯list
expr <- obj$expr # 或 obj[["expr"]]
b) S4对象(ExpressionSet老对象)
library(Biobase)
expr <- Biobase::exprs(obj)
c) SummarizedExperiment / DESeqTransform
library(SummarizedExperiment)
expr <- assay(obj, 1) # 1可换成"counts","tpm"等名字
d) 自定义大列表,名字不确定
expr <- obj[[ which(sapply(obj, function(x) is.matrix(x) & nrow(x)>5000)) ]]
- 确认拿到真正的数值矩阵
class(expr)
dim(expr)
summary(expr[1:5, 1:5])
只要class是matrix/data.frame,且dim出来行是基因、列是样本,就成功了。
- 依旧太大、RStudio依旧不显示?
两种办法绕过Viewer限制:
- 直接head+View
View(head(expr, 1000)) # 只看前1000行
- 写成csv/txt外部打开
write.csv(expr, file = "expr_matrix.csv", quote = FALSE)
# 或者
data.table::fwrite(data.table::as.data.table(expr), "expr_matrix.tsv", sep = "\t")
写完用Excel/Notepad++/VSCode打开即可。
- 一条龙模板(复制即用)
library(SummarizedExperiment) # 提前装好
obj <- readRDS("xxx.rds")expr <- if("SummarizedExperiment" %in% class(obj)){assay(obj, 1)} else if ("ExpressionSet" %in% class(obj)){Biobase::exprs(obj)} else if (is.list(obj) && "expr" %in% names(obj)){obj$expr} else {stop("请手动str(obj)再决定怎么取")}dim(expr)
write.csv(expr, "expr_matrix.csv", quote = FALSE)
跑完去工作目录下拿csv即可,想怎么看就怎么看。