0

次の形式のリスト オブジェクトがあります。

> str(TEST.Lmm)
List of 16
 $ NofSimulations: num 2
 $ r             : num [1:511] 0.851 1.276 1.702 2.127 2.553 ...
 $ Ltheo         : num [1:511] 10.7 11.4 14.2 23.7 28.3 ...
 $ Lmm           : num [1:511] 27.6 27.6 29.6 58.2 74.5 ...
 $ Lmm.sims      : num [1:511, 1:2] 0 0 14.5 35.5 35.5 ...
 $ Lmm.maxdev    : num [1:3] 266.5 45 25.4
 $ Lmm.intdev2   : num [1:3] 7563233 333376 53004
 $ Lmm.intdev1   : num [1:3] 46093 11597 4472
 $ lower         : num [1:511] 0 0 0 19.3 19.7 ...
 $ upper         : num [1:511] 0 0 14.5 35.5 35.5 ...
 $ k             : num 1
 $ pmaxdev       : num 0.333
 $ pintdev2      : num 0.333
 $ pintdev1      : num 0.333
 $ typeIerror    : num 1
 $ call          : language mtests.Lmm(NofSimulations = 2, k = 1, data.mpp = Ahx[[7]], permutate = TRUE,      rmin = rmin, rmax = rmax)
 - attr(*, "class")= chr "mtests.Lmm"

次のプロット コマンドを使用して、これらの結果を問題なくプロットできます [まだ CRAN で公開されている将来の R パッケージの関数を使用しています]。

plot.mtests.Lmm(TEST.Lmm, Plot.zeroline=TRUE, main="", xlim=c(0,rmax), ylim=c(-500,500), xlab=expression(italic(r)), ylab=expression(italic( hat(L)[mm](r)-hat(L)(r))), las=1) #this works fine!

プロット関数はかなり複雑ですが、知っておくべき重要なことは、上記のリストのほとんどの要素 ($ NofSimulations、$r など) の使用を呼び出すことです。

一連の分析を実行しましたが、結果は次の形式のマトリックスです。

> Greenland.Lmm
               [,1]         [,2]         [,3]         [,4]         [,5]         [,6]        
NofSimulations 2            2            2            2            2            2           
r              Numeric,511  Numeric,512  Numeric,512  Numeric,512  Numeric,512  Numeric,511 
Ltheo          Numeric,511  Numeric,512  Numeric,512  Numeric,512  Numeric,512  Numeric,511 
Lmm            Numeric,511  Numeric,512  Numeric,512  Numeric,512  Numeric,512  Numeric,511 
Lmm.sims       Numeric,1022 Numeric,1024 Numeric,1024 Numeric,1024 Numeric,1024 Numeric,1022
Lmm.maxdev     Numeric,3    Numeric,3    Numeric,3    Numeric,3    Numeric,3    Numeric,3   
Lmm.intdev2    Numeric,3    Numeric,3    Numeric,3    Numeric,3    Numeric,3    Numeric,3   
Lmm.intdev1    Numeric,3    Numeric,3    Numeric,3    Numeric,3    Numeric,3    Numeric,3   
lower          Numeric,511  Numeric,512  Numeric,512  Numeric,512  Numeric,512  Numeric,511 
upper          Numeric,511  Numeric,512  Numeric,512  Numeric,512  Numeric,512  Numeric,511 
k              1            1            1            1            1            1           
pmaxdev        0.3333333    0.3333333    0.3333333    0.3333333    0.3333333    0.6666667   
pintdev2       0.3333333    0.3333333    0.3333333    0.3333333    0.3333333    1           
pintdev1       0.3333333    0.3333333    0.3333333    0.3333333    0.3333333    0.6666667   
typeIerror     1            1            1            1            1            1           
call           Expression   Expression   Expression   Expression   Expression   Expression 

前に示したプロット コマンドを使用して、これらのそれぞれを個別にプロットしたいと思います。ただし、次の操作を行うと、エラー メッセージが表示されます。

# step 1) transform matrix into list
xnew<-lapply(seq_len(ncol(Greenland.Lmm[,1,drop=FALSE])), function(i) Greenland.Lmm[,1,drop=FALSE][,i])

> plot.mtests.Lmm(xnew, Plot.zeroline=TRUE, main="", xlim=c(0,max(Greenland.Lmm[,1]$r)), ylim=c(-500,500), xlab=expression(italic(r)), ylab=expression(italic( hat(L)[mm](r)-hat(L)(r))), las=1)
Plot of r vs L[mm](r)-L(r).
Error in 1:x$NofSimulations : argument of length 0

問題は、plot.mtests.Lmm 関数によって呼び出されたリスト内のデータにアクセスできないことです。

> xnew$NofSimulations
NULL
#vs
> xnew[[1]]$NofSimulations
[1] 2

したがって、私のオプションは、むしろ plot.mtests.Lmm 関数を変更するか (これは望ましくありません)、それを回避する方法を見つけることです...しかし、どのように? 余分な [[1]] に乗るにはどうすればよいですか? また、各ステップを手動で複製する必要がないように、これらすべてを素敵な小さなコード (おそらく for ループ?) に入れたいと思います。何が最善のアプローチであるかについてのアイデアをいただければ幸いです。

4

2 に答える 2

1

xnew$NofSimulationsの例では、指定したとおりに 2 を返す必要があります (つまり、 の最初の列のみを調べますGreenland.Lmm)。

xnew<-unlist(lapply(seq_len(ncol(Greenland.Lmm[,1,drop=FALSE])),
  function(i) Greenland.Lmm[,1,drop=FALSE][,i]), recursive = FALSE)

ただし、この例は、あなたがやりたいことからかなり手を加えられたように見えます。シーケンシャルの各列のデータをプロットする予定がある場合Greenland.Lmmは、元の質問で行った方法と同様に xnew を作成することをお勧めします

xnew<-lapply(seq_len(ncol(Greenland.Lmm)), function(i) Greenland.Lmm[,i])

そして、次のことを行います。

plot.mtests.Lmm(xnew[[1]], Plot.zeroline=TRUE, main="", 
  xlim=c(0,max(xnew[[1]]$r)), ylim=c(-500,500), 
  xlab=expression(italic(r)), 
  ylab=expression(italic( hat(L)[mm](r)-hat(L)(r))), las=1)

のリスト インデックスを任意の列番号に置き換えますxnew

各列のデータを一気にプロットしたい場合:

lapply(seq_len(ncol(Greenland.Lmm)),function(x){
  xnew<-Greenland.Lmm[,x]
  plot.mtests.Lmm(xnew, Plot.zeroline=TRUE, main="",
    xlim=c(0,max(xnew$r)), 
    ylim=c(-500,500), xlab=expression(italic(r)), 
    ylab=expression(italic( hat(L)[mm](r)-hat(L)(r))), las=1)
  }
)

これらの提案は、あなたが望むものをあなたにもたらしますか?

于 2012-04-15T21:30:44.440 に答える
0

そこにはたくさんのコードがあるので、私はベースから外れているかもしれませんがsapply(xnew, "[[", "NofSimulations")、リストから NofSimulations 要素を取得するために使用できるようです。ベクトルになったら、プロットしてみませんか?

于 2012-04-13T15:59:45.683 に答える