任何(is.na(计数))= FALSE 时的 DESeq2 "NA values are not allowed" 错误

DESeq2 "NA values are not allowed" error when any(is.na(counts)) = FALSE

我有一个计数矩阵,其中包含 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,size=1),100,10)
colnames(counts) = paste0("c",1:10)
counts[1] = 2.5e9

DESeqDataSetFromMatrix(counts, colData = data.frame(colnames(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), colData = data.frame(colnames(counts)), design = ~1)