2013-07-22 20 views
1

我想在R圖中顯示物理單位。爲了有更好的排版,我使用表達式函數是這樣的:表達式中的變量部分(...)與R

plot(rnorm(10),rnorm(10),main=expression(µg.L^-1)) 

現在假設單元不是靜態已知的,並且由可變[單位]給出:

unit = 'µg.L^-1' 
plot(rnorm(10),rnorm(10),main=expression(unit)) 

這當然不起作用,因爲[單位]沒有被它的價值取代。無論如何,有沒有辦法實現這一點?

編輯: 我要強調的是,這裏的主要困難是要顯示的單元作爲一個字符串我的繪圖功能發送。所以unit的內容應該被解釋爲某個表達式(即從字符串轉換爲表達式對象)的表達式,這就是texb回答得心應手的地方。因此,請不要將此問題標爲重複項,因爲parse的使用在此處很重要,甚至在您建議的帖子中都沒有提及。

回答

2

如何:

unit = 'µg.L^-1' 
plot(rnorm(10),rnorm(10),main=parse(text=unit)) 
+0

作品就像我的預期。非常感謝! – pveber

+1

或'main = bquote(。(unit))' – baptiste

+0

這不是一個解決方案,它會產生錯誤的排版(實際上與main = unit沒有區別)。 – pveber

2

bquote功能使用戶可以創建表達式,而從變量插入值的靈活性。這裏有一個例子:

unit <- as.name('mu') 
plot(rnorm(10), main=bquote(.(unit)*.L^-1)) 
+0

對不起,如果它不清楚,但你錯過了點:我不知道什麼單位是。它可以是mg.L^-1以及V.S^2;我想要一個可以渲染任何這種物理單元的函數。你描述的替代是沒有用的,因爲'unit'的內容沒有被解釋(因此沒有被正確渲染)。 – pveber

+0

@pveber,我在您的標題中使用了「部分」一詞,意味着您最終可以擴展到單元屬於較大表達式的一部分,以用作標題,「bquote」和其幫助頁面上提到的函數從不同的部分建立表達。 –

2

我覺得這兩個答案都很有幫助,但是想提出一個更完整的使用plotmath語法。您目前接受的答案並不真正分離希臘穆,Greg Snow的回答並沒有說明如何將表達式用作值(但它確實表明如何在表達式中進行替換)。所以這是另一種替代方法,它也顯示了使用一個作爲cdot運算符的分解「點」,我認爲這更符合您對排版的興趣。

plot(1,1, main=expression(mu*g %.% L^-1)) 

它也可以創建完全形成表達及名稱保存:

micgmperL = expression(mu*g %.% L^-1) 
plot(1,1, main=micgmperL) 
+0

感謝這很有趣,但正如我向格雷格評論的那樣,我不認爲這回答了我的問題:在進行劇情時,我只有一個包含物理單位的字符串變量。該字符串可能包含「mg.L^2」或「表達式(mu * g%。%L^2)」,但該內容需要解釋,即從字符串轉換爲表達式。您的建議確實可以與解析結合使用,例如: unit ='表達式(paste(「Concentration in」,mu * g%。%L^-1))' plot(rnorm(10),rnorm 10),main = eval(parse(text = unit))) – pveber