`rownames<-`(`*tmp*`, value = colnames(countData)) 中的错误:尝试在没有维度的对象上设置 'rownames'

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

我发现了一个完全相同的问题,但没有任何有用的答案,因为作者没有提供他们的文件。我正在按照手册 3.2 Starting from count matrices 使用 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

顺便说一句,我的计数数据包含转录本,有时几个转录本(ENST)对应单个基因(ENSG)。 DESeq2 能否帮我解决并只给我带基因的输出?将转录本转化为基因很容易,但很难从几个位置中找出一个位置。

提前谢谢你, 卡西亚

作为一般规则,Bioconductor 问题会在 Bioconductor 支持网站上获得更多(相关)关注 link here。 但是,我可以尝试给出一些指示。您收到的错误是因为您的 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