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