使用列表中的索引作为绘图标题中的变量

时间:2012-04-30 15:49:09

标签: r list plot

我创建了一个图形功能:

plotfun = function(dat, pos, tetrad.name=NULL, snp.cols=c("blue", "red", "lightgray")){
    plot(1,1, type="n", xlim=c(min(pos), max(pos)), ylim=c(0.75,4.25), yaxt="n", xaxt="n", main=paste("CCT6 -",tetrad.name), xlab="", ylab="", bty="n", cex=.75)
    abline(h=1:4, lty="dotted")
    tmpnull = sapply(1:4, function(n) points(pos, rep((4:1)[n],length(pos)), col=snp.cols[dat[n,]], pch=16))
    mtext(c("a", "b", "c", "d"), side=2, line=0.5, at=4:1, las=1, cex=.5)
}

我正在尝试使用此图形功能来绘制我从较大列表中索引的矩阵子集(在此示例中为x)。我正在使用sapply单独绘制所有矩阵的图表:

sapply(1:69, function(n) plotfun(dat=matrix.transform(x[[n]]), pos=cct6.pos, tetrad.name= n ))

我的问题是我无法弄清楚如何将绘图标题读作附加到每个矩阵的列表编号。相反,它会标记它们1:69,从索引输入中丢失信息。例如,如果第一个输入为cct6[[35]],我希望标题标题为"CCT6-35"而不是"CCT6-1"

很抱歉,如果这是一个基本问题。我只是坚持这个...

1 个答案:

答案 0 :(得分:1)

使用以下代码段在“plotfun”中将您的main= ...参数更改为情节调用中的一行:

main=bquote("CCT6-*.(tetrad.name))

当我尝试使用一个简单的测试用例时,我发现懒惰的评估方面导致了(不是错误,但未能正确标记图。添加force()cal修复了这个问题。比较这两个:

for(n in 1:2) plot(1,1,main=bquote("N="*.(n)))

for(n in 1:2) {force(n); plot(1,1,main=bquote("N="*.(n)))}