当any(is.na(counts)) = FALSE时,DESeq2“不允许NA值”错误

Jac*_*nry 3 r bioinformatics dataframe

我有一个计数矩阵,其中包含 NA 值。

\n

我使用将它们设置为 0

\n
counts[is.na(counts)] <- 0\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

但是当我尝试使用时

\n
DESeqDataSetFromMatrix(counts, colData = data.frame(colnames(counts)), design = ~1)\n
Run Code Online (Sandbox Code Playgroud)\n

我收到错误

\n
Error in validObject(.Object) : invalid class \xe2\x80\x9cDESeqDataSet\xe2\x80\x9d object: NA values are not allowed in the count matrix\n
Run Code Online (Sandbox Code Playgroud)\n

这看起来很清楚,但我不明白,因为我将所有 NA 值设置为 0,现在如果我这样做

\n
any(is.na(counts))\n
Run Code Online (Sandbox Code Playgroud)\n

我得到了假。

\n

非常感谢任何帮助,谢谢!

\n

Stu*_*olf 5

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

\n
library(DESeq2)\n\ncounts = matrix(rnbinom(1000,mu=50,size=1),100,10)\ncolnames(counts) = paste0("c",1:10)\ncounts[sample(length(counts),10)] = NA\ncounts[is.na(counts)] <- 0\n\nDESeqDataSetFromMatrix(counts, colData = data.frame(colnames(counts)), design = ~1)\n
Run Code Online (Sandbox Code Playgroud)\n

如果你有无限的值,它会给你一个稍微不同的错误:

\n
counts = matrix(rnbinom(1000,mu=100,size=1),100,10)\ncolnames(counts) = paste0("c",1:10)\ncounts[1] = 2.5e9\n\nDESeqDataSetFromMatrix(counts, colData = data.frame(colnames(counts)), design = ~1)\n
Run Code Online (Sandbox Code Playgroud)\n

它看起来像这样:

\n
converting counts to integer mode\nError in validObject(.Object) : \n  invalid class \xe2\x80\x9cDESeqDataSet\xe2\x80\x9d object: NA values are not allowed in the count matrix\nIn addition: Warning message:\nIn mde(x) : NAs introduced by coercion to integer range\n
Run Code Online (Sandbox Code Playgroud)\n

出现错误是因为您无法将大数转换为整数:

\n
max(counts)\n[1] 8007375876\n\nas.integer(max(counts))\n[1] NA\nWarning message:\nNAs introduced by coercion to integer range \n
Run Code Online (Sandbox Code Playgroud)\n

这小于允许的最大值:

\n
.Machine$integer.max\n[1] 2147483647\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
DESeqDataSetFromMatrix(round(counts/2), colData = data.frame(colnames(counts)), design = ~1)\n
Run Code Online (Sandbox Code Playgroud)\n