首页 > 解决方案 > `rownames<-`(`*tmp*`, value = colnames(countData)) 中的错误:尝试在没有维度的对象上设置“rownames”

问题描述

由于作者没有提供他们的文件,我发现了一个完全相同的问题,没有任何有用的答案。我正在按照手册3.2 从计数矩阵开始使用 DESeq2 库。我有从 CSV 文件导入的 countdata 和 coldata。我知道 countdata 文件在这里可能是一个问题,但我不明白到底是什么问题。

我的代码:

library(DESeq2)

NGS <- read.csv2(paste0(datadir,"/CLN3_NGS_orig.csv"), header = T,stringsAsFactors = F)
Sinfo <- read.csv2(paste0(datadir,"/Sampleinfo.csv"), header = T,stringsAsFactors = F)
head(NGS)
head(Sinfo)

coldata <- DataFrame(Sinfo)
coldata <- lapply(coldata, as.factor)
coldata

lapply(NGSnum, class)
NGSnum <- data.frame(NGS[1], apply(NGS[2:13],2, as.numeric))
NGSFull <- DESeqDataSetFromMatrix(
countData = NGSnum,
colData = coldata,
design = ~ Genotype + Treatment)
NGSFull

NGS$Genotype <- relevel(NGSFull$Genotype, "WT")

deseqNGS <- DESeq(NGS)
res <- results(deseqNGS)
res

应用 DESeqDataSetFromMatrix 后我的错误:

Error in `rownames<-`(`*tmp*`, value = colnames(countData)) : 
  attempt to set 'rownames' on an object with no dimensions

我在 pastebin 上的 coldata 和 countdata 文件:coldata & countdata

顺便说一句,我的 countdata 包含转录本,有时几个转录本(ENST)对应于单个基因(ENSG)。DESeq2 可以帮我整理出来,只给我输出基因吗?将转录本转化为基因很容易,但很难从多个位置中找出一个位置。

提前谢谢你,卡西亚

标签: rbioconductor

解决方案


作为一般规则,Bioconductor 问题将在此处的 Bioconductor 支持站点链接上获得更多(相关)关注。但是,我可以尝试给出一些指示。你得到的错误是因为你的coldata是一个列表而不是一个DataFrame对象。

coldata <- lapply(coldata, as.factor)

为每一列创建一个列表。我在下面的代码中还解决了一些其他问题。最重要的是 NGSnum 需要是一个整数矩阵。许多 RNAseq 计数矩阵实际上是浮点数(或 R 中的双精度数),但这是由于算法为可能来自多个基因的读取分配概率。我所做的是将值四舍五入以将它们转换为整数。

library(DESeq2)

NGS <- read.csv2("Countdata10.csv", header = TRUE, stringsAsFactors = FALSE)
Sinfo <- read.csv2(paste0("Sampleinfo.csv"), header = TRUE, stringsAsFactors = FALSE)

coldata <- DataFrame(apply(X = Sinfo, MARGIN = 2, FUN = as.factor)) # use apply instead of apply

NGSnum <- apply(X = NGS[,-1], MARGIN = 2, FUN = as.numeric)
NGSnum <- apply(X = NGSnum, MARGIN = 2, FUN = round)
rownames(NGSnum) <- NGS$Transcript
NGSFull <- DESeqDataSetFromMatrix(
  countData = NGSnum,
  colData = coldata,
  design = ~ Genotype + Treatment)

NGSFull$Genotype <- relevel(NGSFull$Genotype, "WT")

deseqNGS <- DESeq(NGSFull)
res <- results(deseqNGS)
res

推荐阅读