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!

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 循环?),这样我就不必手动复制每个步骤。我会很感激任何关于什么是最好的方法的想法!

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 回答