数据框列表到绘图列表; for 循环,lapply

list of dataframes to a list of plots; for loops, lapply

我在 Rlist 中有一个数据帧列表:

Rlist = lapply(1:5,function(i){
  data.frame(Frame_times = seq(0,1,length.out=100),L1=runif(100), L2 = runif(100), L3 = runif(100))
})
names(Rlist) = letters[1:5]

如您所见,有一个包含 5 个数据帧的列表。在每个数据框中,有三个列,分别称为 L1L2L3。我想使用每个数据框中的这三列来创建图(特别是光谱分析图),并且我想使用循环系统地执行此操作。

下面的无效代码尝试执行以下操作:使用 Rlist 中每个数据框中感兴趣的三列创建绘图,并将它们放入名为 aplotfinal 的新列表中。最后,我应该有一个列表列表,其中包含名为 aplotfinal 的图,总共有 15 个图,但更具体地说,5 个列表,每个列表有 3 个图。

aplotfinal <- lapply(1:length(Rlist),function(i){
  a <- Rlist[[i]][,-1]
  for(t in colnames(a)){
    del <- 0.016667 
    x.spec <- spectrum(a$t, log = "no", plot = FALSE) 
    spx <- x.spec$freq/del
    spy <- 2*x.spec$spec 
    aplotfinal[[i]] <- qplot(y = spy,x=spx,geom="line") + 
      ggtitle(names(Rlist)[i]) + 
      xlab("frequency")+ylab("spectral density")
  }
})

希望这是有道理的。谢谢!

以下代码是问题的更正代码。它输出一个包含 5 个成员的列表,每个成员包含 3 个图。

aplotfinal <- lapply(1:length(Rlist),function(i){
  a <- Rlist[[i]][,-1]
  lapply(colnames(a), function(t){
    del <- 0.016667 
    x.spec <- spectrum(a[[t]], log = "no", plot = FALSE) 
    spx <- x.spec$freq/del
    spy <- 2*x.spec$spec 
    qplot(y = spy,x=spx,geom="line") + 
      ggtitle(names(Rlist)[i]) + 
      xlab("frequency")+ylab("spectral density")
  })
})

查看第一个子列表的第一个图:

aplotfinal[[1]][[1]]