cramer.test:强制引入的NA

时间:2014-10-26 23:43:08

标签: r

我知道Google上有很多关于此问题的信息,但我无法解决。 我有一个数据框:

> str(myData)
'data.frame':   1199456 obs. of  7 variables:  
$ A: num  3064 82307 4431998 1354 193871 ...  
$ B: num  6067 403916 2709997 2743 203434 ...  
$ C: num  299 11752 33282 170 2748 ...  
$ D: num  105 6676 7065 20 1593 ...  
$ E: num  8 572 236 3 170 ...  
$ F: num  0 21 95 0 13 ...  
$ G: num  583 18512 961328 348 42728 ...

然后我将它转换为矩阵,以便应用Cramer-von Mises测试来自" cramer"库:

> myData = as.matrix(myData)
> str(myData)
 num [1:1199456, 1:7] 3064 82307 4431998 1354 193871 ...
 - attr(*, "dimnames")=List of 2
  ..$ : chr [1:1199456] "8" "32" "48" "49" ...
  ..$ : chr [1:7] "A" "B" "C" "D" ...

之后,如果我应用" cramer.test(myData [x1:y1,],myData [x2:y2,])"我收到以下错误:

Error in rep(0, (RVAL$m + RVAL$n)^2) : invalid 'times' argument
In addition: Warning message:
In matrix(rep(0, (RVAL$m + RVAL$n)^2), ncol = (RVAL$m + RVAL$n)) :
NAs introduced by coercion

我还尝试将数据帧转换为这样的矩阵,但错误是相同的:

> myData = as.matrix(sapply(myData, as.numeric))
> str(myData)
 num [1:1199456, 1:7] 3064 82307 4431998 1354 193871 ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:7] "A" "B" "C" "D" ...

1 个答案:

答案 0 :(得分:3)

您的问题是您的数据集对于cramer.test正在使用的算法来说太大了(至少它的编码方式)。代码尝试根据

创建查找表
lookup <- matrix(rep(0, (RVAL$m + RVAL$n)^2), 
     ncol = (RVAL$m + RVAL$n))

其中RVAL$mRVAL$n是两个样本的行数。标准maximum length of an R vector在32位平台上是2 ^ 31-1:由于您的样本具有相等的行数N,您将尝试创建长度为(2*N^2)的向量,这在您的case是5.754779e + 12 - 即使R允许你创建向量,也可能太大了。

您可能需要寻找另一个测试实现或其他测试。