当anyis.nacounts= FALSE时,DESeq2“不允许使用NA值”错误

问题描述

我有一个包含NA值的计数矩阵。

我使用设置它们为0

counts[is.na(counts)] <- 0

然后成功将它们设置为0,我可以看到这一点。

但是当我尝试使用时

DESeqDataSetFromMatrix(counts,colData = data.frame(colnames(counts)),design = ~1)

我得到了错误

Error in validobject(.Object) : invalid class “DESeqDataSet” object: NA values are not allowed in the count matrix

哪个看起来很清楚,但我不明白,因为我将所有NA值都设置为0,如果可以,现在将其设置为

any(is.na(counts))

我得到了假。

非常感谢您的帮助!

解决方法

如果您只有NA,它应该可以工作。

library(DESeq2)

counts = matrix(rnbinom(1000,mu=50,size=1),100,10)
colnames(counts) = paste0("c",1:10)
counts[sample(length(counts),10)] = NA
counts[is.na(counts)] <- 0

DESeqDataSetFromMatrix(counts,colData = data.frame(colnames(counts)),design = ~1)

如果您具有无穷大的值,则会给您一个略有不同的错误:

counts = matrix(rnbinom(1000,mu=100,1:10)
counts[1] = 2.5e9

DESeqDataSetFromMatrix(counts,design = ~1)

它看起来像这样:

converting counts to integer mode
Error in validObject(.Object) : 
  invalid class “DESeqDataSet” object: NA values are not allowed in the count matrix
In addition: Warning message:
In mde(x) : NAs introduced by coercion to integer range

由于无法将大数转换为整数而发生错误:

max(counts)
[1] 8007375876

as.integer(max(counts))
[1] NA
Warning message:
NAs introduced by coercion to integer range 

这小于允许的最大值:

.Machine$integer.max
[1] 2147483647

出于分析目的,由于您对基因之间的差异更感兴趣,因此一种方法是按比例缩小矩阵

DESeqDataSetFromMatrix(round(counts/2),design = ~1)