【问题标题】:cramer.test: NAs introduced by coercioncramer.test:强制引入的 NA
【发布时间】:2014-10-26 23:43:07
【问题描述】:

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

> 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”库中的 Cramer-von Mises 测试:

> 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" ...

【问题讨论】:

  • 什么是 x1、y1、x2、y2?

标签: r


【解决方案1】:

您的问题是您的数据集对于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) 的向量,在您的情况下为 5.754779e +12 -- 可能太大了,即使 R 会让你创建向量。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    相关资源
    最近更新 更多