0

コードに小さな問題があります。これが私のコードのサンプルです。関数を実行すると、次の結果が得られます。また、raply()fromplyrパッケージを使用しており、この関数は出力をリスト配列として返します。私のコード

EmpPval<-function(dat,numberOfPermutations=100,usePlyr=TRUE)

{

  if(usePlyr)
  {
    require(plyr)
  }

   if(usePlyr)
  {

statistic <- raply(numberOfPermutations,permdat(dat)$statistic,.progress="tk")
    browser()
  }

  else
  {    
    statistic <- replicate(expr=permdat(dat)$statistic,n=numberOfPermutations,
                           simplify=TRUE)
  }

 }

>statistic   #this is from one iteration

    [1] 0.0409457

    attr(,"numerator")

    [1] 0.0007954759

    attr(,"denominator")

    [1] 0.01942758

私の結果には属性があります。今私の問題は、これらの値を変数にそのまま格納できず、次のように再度アクセスしたいことです。

s1<-attr(statistic,"numerator")

s2<-attr(statistic,"denominator") 

permdat()for ループ内で実行されます。したがって、このような値を 100 個生成し、100 個すべての統計値を属性とともに保存したいと考えています。私が今得ているのは次のようなものです:

>statistic ##this is after it runs in a loop

[1] 0.028793900 [2] 0.073739396 [3] 0.049136225 [4] 0.058408310 [5] 0.027253176 [6] 0.019471812 [7] 0.071434025 [8] 0.038411458 [9] 0.028921401 [10] 0.021929506..... The attribute values are not stored. 

誰かがこれについて私を助けることができますか? 前もって感謝します。

4

1 に答える 1

0

permdat(dat)$statisticの結果をベクトルではなくリストに格納できます。これにより、すべての属性が保持されます。

後者は属性を削除するため、replicate代わりに使用することを強くお勧めします。raplyを指定するsimplify = FALSEと、結果はリストに格納され、すべての属性が保持されます。

statistic <- replicate(expr = permdat(dat)$statistic, n = numberOfPermutations,
                       simplify = FALSE)

これで、 を使用して単一のリスト オブジェクトにアクセスできるようになりました。"[["たとえばstatistic[[1]]、最初のオブジェクトとその属性が返されます。

次の値を含むベクトルを返すことができますunlist

unlist(statistic)

属性を持つベクトルは、次のように返すことができますsapply:

sapply(statistic, attr, "numerator")

sapply(statistic, attr, "denominator")

データに簡単にアクセスしたい場合は、新しいオブジェクトを作成できますs2:

s2 <- unlist(statistic)
attributes(s2, "numerator") <- sapply(statistic, attr, "numerator")
attributes(s2, "denominator") <- sapply(statistic, attr, "denominator")

これで、次のように簡単に使用できます。

attr(s2, "numerator")
attr(s2, "denominator") 
于 2013-02-27T08:43:41.030 に答える