我有以下格式的列表对象:
> 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!
plot 函数相当复杂,但重要的是要知道它调用了上面列表中的大部分元素(例如 $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
我想使用前面介绍的 plot 命令分别绘制每一个。但是,当我执行以下操作时,我收到一条错误消息:
# 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 循环?),这样我就不必手动复制每个步骤。我会很感激任何关于什么是最好的方法的想法!