2012-12-21 22 views
2

當運行下面的代碼,我得到Error in as.graphicsAnnot(text) : could not find function "bold"。我怎樣才能解決這個問題?圖()和do.call():如何通過表達式時「...」否則使用繪製標題?

my.qq <- function(x, main=expression(bold(italic(F)~~"Q-Q plot")), 
        margs=list(side=3, cex=par("cex.main"), font=par("font.main"), 
        adj=par("adj"), xpd=NA), ...) 
{ 
    plot(qnorm(ppoints(n <- length(x))), sort(x), ...) 
    do.call(mtext, c(list(main), margs)) 
} 
x <- rnorm(100) 
my.qq(x) 
my.qq(x, main=substitute(bold(italic(F)[N(mu.,s2.)]~~"Q-Q plot"), list(mu.=0, s2.=1))) # fails 

我的目標是使用列表margs傳遞額外的參數mtext()。這就是通常與...完成,但這些參數已經傳遞給plot()

回答

3

substitute在這種情況下返回一個語言對象,而不是表達式。表達expressionR鬆散使用,但是這裏似乎mtext需要expression類的對象。

可以通過在as.expression()

my.qq(x, main=as.expression(substitute(bold(italic(F)[N(mu.,s2.)]~~"Q-Q plot"), list(mu.=0, s2.=1)))) 

或多個包裹substitute(...)確保這簡單地通過使表達替代(如將在正常呼叫被要求mtext

my.qq(x, main=substitute(expression(bold(italic(F)[N(mu.,s2.)]~~"Q-Q plot")), list(mu.=0, s2.=1))) 

無論是以上示例將生成 enter image description here

substitute

幫助中有一個註釋當參數爲expression(...)時,替換和引用通常會引起混淆。其結果是將表達式構造函數的調用,並需要與EVAL,得到實際表達對象進行評估。

在這種情況下 eval然而

不需要

+0

*哎呀*,我應該知道...感謝了很多幫助(這麼快)! –