2017-09-07 33 views
2

我想知道是否有辦法將apply函數和matplot函數結合起來爲矩陣中的每n列生成一個新圖。從一個矩陣中製作多條多線圖

我目前有一個矩陣,1350行640列。我使用matplot繪製所有行每8列的值:

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

我要自動執行此一點,已列值八每個循環和標籤移動的PNG通過改變一。 有人可以給指示嗎?

+0

歡迎來到stackoverflow.com。你可以通過[SO tour](https://stackoverflow.com/tour)來改善你的問題,並閱讀如何提問[好問題](https://stackoverflow.com/help/how-to-ask) 。最後,請學習如何創建[最小,完整和可驗證示例](https://stackoverflow.com/help/mcve)。 –

+0

順便說一句:它是'ylab'而不是'y-lab' –

+0

我需要它們來發表,所以使用pdf不是一個選項:( – ipavli

回答

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() 
} 
+0

它應該是'i:(i + 7)'。是一次9列。 –

+0

@RuiBarradas好眼睛... thx –

+0

這工作,除了它也改變了每個PNG八,但我只是另一個變量。 謝謝! – ipavli

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) 
)