0

私は 3 つのデータセットを持っており、私の計算でどれだけの N が使用されたかを知りたいです。

データを次元 (nx、ny、ntsteps、ndatasets) の多次元配列に読み込みます。たとえば、より小さなサンプル データセットを使用します。

      # nx   ny   nsteps ndatasets
            dat = runif(20 * 30 * 100 *  3)
        dim(dat) = c(20, 30, 100, 3)
        > str(dat)
    num [1:20, 1:30, 1:100, 1:3] 0.1834 0.8537 0.0672 0.0734 0.8078 ...

関数を利用してcorこの関数を作成し、N の数を計算します。

    cor_withN <- function(...) {
        res <- try(cor.test(...)$parameter+2, silent=TRUE)
        ifelse(class(res)=="try-error", NA, res)}

次に、 apply が行列だけでなく多次元配列でも機能するという事実を利用します。

apply を使用して、すべての x、y、z トリプルを反復処理します。

      result = apply(dat, c(1,2), function(x) cor_withN(x[,1], x[,2],x[,3]))
     > str(cor_result)
     logi [1:20, 1:30] NA NA NA NA NA NA ..

最後の行がうまくいった場合、 NA NA NA NA を取得することで何かが間違っています! それから

     str(cor_result)   

する必要があります

     logi [1:20, 1:30] 100 100 100 100 100 ..(nsteps)

なぜ私がNAを取得しているのか、またはそれを行う別の方法はありますか?

2つのデータセットでテストしたところ、うまくいきました!

      cor_result = apply(dat, c(1,2), function(x) cor_withN(x[,1], x[,2]))
      > str(cor_result)
     num [1:20, 1:30] 100 100 100 100 100 100 100 100 100 100

だから問題は私が追加したときですx[,3]!! ありがとう

4

1 に答える 1

2

これを使用すると、たとえば次のことができます。

corpij <- function(i,j,data) {
             res <- tryCatch(cor.test(data[,i],data[,j])$parameter+2,
                    error = function(e) NA)

corp <- Vectorize(corpij, vectorize.args=list("i","j"))
result = apply(dat, c(1,2), 
               function(x) outer(1:ncol(x),1:ncol(x), corp,data=x))

outerすべての列の組み合わせを実行します。

于 2013-07-15T17:55:40.343 に答える