0

data.table理解できないエラーが発生しています。私がやりたいことは、t.test事後分析として複数の を実行することです。ここにいくつかのサンプルデータがあります:

dt <- data.table(
  expand.grid( list( SID = rep( paste0( "x", 1:3), 3 ), MID = paste0( "y", 1:5) ), stringsAsFactors=FALSE ),
  A = rnorm(45),
  key = c("SID")
)    dt

   SID MID          A
1:  x1  y1 -1.4451214
2:  x1  y2 -0.6141025
3:  x1  y3 -1.0388595
4:  x1  y4 -0.8098261
...

これにより、奇妙なエラーが発生します。

dt[ , list( t.test( x=.SD[ J("x1"), A ], y=.SD[ J("x2"), A ] )$p.value ) , by = MID ]
Error in setkey(ans, NULL) : 
  x may no longer be the character name of the data.table. The possibility was undocumented and has been removed.

これが何を意味するのかわかりませんが、望ましい出力は次のようになります

   MID p.x1.x2
1: y1  0.1
2: y2  0.2
3: y3  0.3
4: y4  0.4
5: y5  0.5

そして、これが最終的にできることです(全体像を示すためだけに):

combinations <- lapply( as.data.frame( combn( unique(dt$SID), 2 ), stringsAsFactors=FALSE ), identity )
combinations
$V1
[1] "x1" "x2"

$V2
[1] "x1" "x3"

$V3
[1] "x2" "x3"    

test.tab <- lapply( combinations, function( .sid, .dt ){
  dt[ , list( t.test( x=.SD[ J(.sid[1]), A ], y=.SD[ J(.sid[2]), A ] )$p.value ) , by = MID ]
}, .dt = dt )
test.tab <- as.data.table( as.data.frame( test.tab ) )

エラーを回避する方法を教えてください。同じ結果を得るための他のアプローチも問題ありません。

4

1 に答える 1

1

エラーは、次の行から発生しますt.test.default

y <- y[yok]

Error in setkey(ans, NULL) : 
  x may no longer be the character name of the data.table. The possibility was undocumented and has been removed.

画面に関数を印刷できますstats:::t.test.default(これは、t.test のバージョンで実行されるものです)。

ここでyは、あなたが提供しているベクトルであることが期待されています.SD[J("x1"), A]data.tableコメントで述べたように)。

あなたの場合、次のようにyok評価されます。

       SID    A
 [1,] TRUE TRUE
 [2,] TRUE TRUE
 [3,] TRUE TRUE
 [4,] TRUE TRUE
 [5,] TRUE TRUE
 [6,] TRUE TRUE
 [7,] TRUE TRUE
 [8,] TRUE TRUE
 [9,] TRUE TRUE
[10,] TRUE TRUE
[11,] TRUE TRUE
[12,] TRUE TRUE
[13,] TRUE TRUE
[14,] TRUE TRUE
[15,] TRUE TRUE

yは:

    SID           A
 1:  x2 -0.80390040
 2:  x2  0.34483953
 3:  x2  2.08006382
 4:  x2  0.87859745
 5:  x2  1.04123702
 6:  x2  0.13653716
 7:  x2  0.58482554
 8:  x2 -0.78308074
 9:  x2 -0.02177879
10:  x2 -0.33626948
11:  x2  0.17005957
12:  x2  1.15227502
13:  x2  1.21486699
14:  x2  0.93856469
15:  x2 -0.54720535

「y」のキーが「SID」に設定されているy[yok]ため、このエラーが発生します。

つまり、x 引数と y 引数に値のベクトルを指定するように求められますが、data.table を指定すると、列 "SID" でキーが付けられy[yok]、2 つの列で内部的に実行されるため、そこでエラーが発生します。代わりに次のようにas.data.frame(.SD[J("x1"), A])すると、このエラーは消えますが、他のエラーが発生することがわかります (「キー」の問題がないため、このエラーは消えます)。

これを行う:

debugonce(stats:::t.test.default)
t.test(dt["x1", A], dt["x2", A])

「Enter」を押し続けて、私が何を意味するかを確認してください。

于 2013-06-04T16:02:57.240 に答える