r语言 - 简单黄土中的错误:外来函数调用中的 NA/NaN/Inf



我正在尝试从包中使用normalize.loess()lumiN() lumi

在第 38 次迭代中,在 loess() 函数中失败

Error in simpleLoess(y, x, w, span, degree, parametric, drop.square, normalize,  : 
NA/NaN/Inf in foreign function call (arg 1)

我已经搜索过,这可能与缺少参数的事实有关。

我检查了debug(loess),所有参数都已定义。

我不能发布数据,因为它们非常大(13237x566),也因为它们是机密的,但是。我发现这个:

  • 一个最小的例子有效(随机矩阵 20x5)
  • 列 1 和列 38 之间的规范化失败
  • 仅使用成功完成的列进行相同的规范化
  • 这不是内存问题
  • 矩阵没有 NA 值

我错过了什么?

谢谢

法典

raw_matrix <- lumiR('example.txt')
norm_matrix <- lumiN(raw_matrix, method='loess')
Perform loess normalization ...
Done with 1 vs 2 in iteration 1 
Done with 1 vs 3 in iteration 1 
Done with 1 vs 4 in iteration 1 
Done with 1 vs 5 in iteration 1 
Done with 1 vs 6 in iteration 1 
Done with 1 vs 7 in iteration 1 
Done with 1 vs 8 in iteration 1 
Done with 1 vs 9 in iteration 1 
Done with 1 vs 10 in iteration 1 
Done with 1 vs 11 in iteration 1 
Done with 1 vs 12 in iteration 1 
Done with 1 vs 13 in iteration 1 
Done with 1 vs 14 in iteration 1 
Done with 1 vs 15 in iteration 1 
Done with 1 vs 16 in iteration 1 
Done with 1 vs 17 in iteration 1 
Done with 1 vs 18 in iteration 1 
Done with 1 vs 19 in iteration 1 
Done with 1 vs 20 in iteration 1 
Done with 1 vs 21 in iteration 1 
Done with 1 vs 22 in iteration 1 
Done with 1 vs 23 in iteration 1 
Done with 1 vs 24 in iteration 1 
Done with 1 vs 25 in iteration 1 
Done with 1 vs 26 in iteration 1 
Done with 1 vs 27 in iteration 1 
Done with 1 vs 28 in iteration 1 
Done with 1 vs 29 in iteration 1 
Done with 1 vs 30 in iteration 1 
Done with 1 vs 31 in iteration 1 
Done with 1 vs 32 in iteration 1 
Done with 1 vs 33 in iteration 1 
Done with 1 vs 34 in iteration 1 
Done with 1 vs 35 in iteration 1 
Done with 1 vs 36 in iteration 1 
Done with 1 vs 37 in iteration 1 
Done with 1 vs 38 in iteration 1 
Error in simpleLoess(y, x, w, span, degree, parametric, drop.square, normalize,  : 
  NA/NaN/Inf in foreign function call (arg 1)

环境

sessionInfo()

> sessionInfo()
R version 3.0.2 (2013-09-25)
Platform: x86_64-pc-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
[3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
[5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
[7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
[9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
attached base packages:
[1] parallel  stats     graphics  grDevices utils     datasets  methods  
[8] base     
other attached packages:
[1] affy_1.38.1          lumi_2.12.0          Biobase_2.20.0      
[4] BiocGenerics_0.6.0   BiocInstaller_1.10.2
loaded via a namespace (and not attached):
[1] affyio_1.28.0         annotate_1.38.0       AnnotationDbi_1.22.6 
[4] beanplot_1.1          Biostrings_2.28.0     colorspace_1.2-4     
[7] DBI_0.2-7             GenomicRanges_1.12.5  grid_3.0.2           
[10] illuminaio_0.2.0      IRanges_1.18.1        KernSmooth_2.23-10   
[13] lattice_0.20-24       limma_3.16.8          MASS_7.3-29          
[16] Matrix_1.0-14         matrixStats_0.8.12    mclust_4.2           
[19] methylumi_2.6.1       mgcv_1.7-27           minfi_1.6.0          
[22] multtest_2.16.0       nleqslv_2.0           nlme_3.1-111         
[25] nor1mix_1.1-4         preprocessCore_1.22.0 RColorBrewer_1.0-5   
[28] reshape_0.8.4         R.methodsS3_1.5.2     RSQLite_0.11.4       
[31] siggenes_1.34.0       splines_3.0.2         stats4_3.0.2         
[34] survival_2.37-4       tcltk_3.0.2           tools_3.0.2          
[37] XML_3.98-1.1          xtable_1.7-1          zlibbioc_1.6.0

我不知何故弄清楚了什么不起作用:我试图规范化 log2 矩阵。据我所知normalize.loess默认情况下,日志会转换输入矩阵,因此将对数转换两次。

这是一个问题,因为输入矩阵中的某些值等于 1,因此:

log2(log2(1)) = Inf

在规范化期间,这显然是不允许作为值的。

希望这对某人有所帮助。

最新更新