目录

直接看-rstudio里面的-rds-数据-无法看到-expr-表达矩阵的详细数据-,有什么办法呢

直接看 rstudio里面的 rds 数据 无法看到 expr 表达矩阵的详细数据 ,有什么办法呢

[https://csdnimg.cn/release/blogv2/dist/pc/img/activeVector.png VibeCoding·九月创作之星挑战赛 10w+人浏览 1.6k人参与

https://csdnimg.cn/release/blogv2/dist/pc/img/arrowright-line-Black.png]( )

在RStudio里“看不见”expr表达矩阵的常见原因只有两类:

  1. 对象太大,RStudio的Viewer/Environment面板自动截断;
  2. 对象并不是真正的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


  1. 先搞清楚对象结构
# 把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”]]里。


  1. 把表达矩阵“抠”出来
    下面给出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)) ]]

  1. 确认拿到真正的数值矩阵
class(expr)
dim(expr)
summary(expr[1:5, 1:5])

只要class是matrix/data.frame,且dim出来行是基因、列是样本,就成功了。


  1. 依旧太大、RStudio依旧不显示?
    两种办法绕过Viewer限制:

  2. 直接head+View

View(head(expr, 1000))      # 只看前1000行
  1. 写成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打开即可。


  1. 一条龙模板(复制即用)
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即可,想怎么看就怎么看。