r - `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 可以帮我整理出来,只给我输出基因吗?将转录本转化为基因很容易,但很难从多个位置中找出一个位置。
提前谢谢你,卡西亚
解决方案
作为一般规则,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
推荐阅读
- python - 如何记录 ping 的结果?
- python-3.x - 具有这种奇怪行为的 round() 的功能是什么?
- python - 无法让 ForeignKeys 中的相关字段显示在模板中
- node.js - 如何使用 Google Drive API 在团队云端硬盘中创建文件
- python - 用户定义的函数没有循环,我怎样才能让它循环?
- graph-databases - Gremlin:groupCount 之后的除法
- python - 如何获得中间层的输出?
- citrus-framework - 使用 Java DSL TestRunner - 如何在我自己的 Java 代码中访问变量
- java - Artifactory 在启动时抛出异常:“由于输入结束,没有要映射的内容”
- c++ - C++:在项目中使用 nlohmann json