2

我想知道是否有一种方法可以将 apply 函数与matplot函数结合起来,为矩阵中的每 n 列生成一个新图。

我目前有一个 1350 行 640 列的矩阵。我正在使用以下方法绘制每 8 列的所有行的值matplot

png("cmpd1.png")
matplot(data[,1:8], type="l", y-lab="z-score", axes = F) 
axis(side=2)
dev.off()

我想稍微自动化一下,让列值在每个循环中移动 8 次,并且 png 上的标签也移动 1 次。有人可以指点吗?

4

2 回答 2

1

这是带有vapply()格式的绘图名称的答案。将返回关闭的设备 ID。

data <- matrix(rnorm(100*128),nrow = 100,ncol = 128)
vapply(seq(from=1,to=ncol(data)-8,by=8), 
   FUN = function (x) {
     png(paste0("cmpd",formatC(width = 3, format = "d", flag="0", x=x%/%8),".png"))
     matplot(data[,x:(x+8)], type="l", ylab="z-score", axes = F) 
     invisible(dev.off())
     },
   FUN.VALUE=integer(1)
)
于 2017-09-07T19:00:30.680 回答
0

我认为有一个版本,lapply()但循环也可以完成这项工作

for(i in seq(1,ncol(data),8)){
  png(paste0("cmpd",i,".png"))
  matplot(data[,i:(i+7)], type="l", ylab="z-score", axes = F) 
  axis(side=2)
  dev.off()
}
于 2017-09-07T18:29:40.313 回答