次の形式のリスト オブジェクトがあります。
> 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 ループ?) に入れたいと思います。何が最善のアプローチであるかについてのアイデアをいただければ幸いです。