-3

Rでフィッシャーの正確なテストを使用するためのp値を見つけたい5000を超えるデータセットがあります。それらはcsvファイルに保存され、次のようになります。

100 5000 400 500
250 400  600 400


... ... ... ...

ここで、各行は分割表を表します。今、私は一度に分割表を作成しなければなりませんが、それには永遠に時間がかかります。

これまでこのコードを使用しました alltables<-read.table("untitled1.csv") ##データを読み取るために apply(alltables,1, function(x) fisher.test(matrix(x,nr=2))$p 。価値)

しかし、「fisher.test(matrix(x, nr = 2)) のエラー: 'x' には少なくとも 2 つの行と列が必要です」というエラーが表示されます。

4

1 に答える 1

0

次のようなことができます。しかし、あなたは実際に再現可能な例を示していないので、最初にいくつかのおもちゃデータを作成します:

set.seed(1)
print(dat <- matrix(rbinom(n = 40, size = 1000, prob = 0.5), ncol = 4))
#      [,1] [,2] [,3] [,4]
# [1,]  500  526  494  505
# [2,]  497  500  512  493
# [3,]  480  488  500  512
# [4,]  464  513  498  497
# [5,]  527  503  518  508
# [6,]  504  517  511  483
# [7,]  519  493  522  471
# [8,]  486  490  497  507
# [9,]  492  499  475  509
#[10,]  530  486  488  501

# Function to be applied row-wise
rowFisher <- function(x, ...) {
  return(fisher.test(matrix(x, nrow = 2, ...))$p.value)
}

# Apply the function row-wise
apply(dat, 1, rowFisher)
# [1] 0.7557946 0.6548804 0.9641424 0.2603181 0.7912598 0.3729036 0.5916955 0.9283668 0.5585135
#[10] 0.2111895

編集私はあなたのコメントを見ませんでした。しかし、これでうまくいくはずです。そうでない場合は、NAデータのどこかに s またはその他の数値以外の値が含まれている可能性があります。

于 2014-07-09T07:50:23.850 に答える