R 的字串控制
※ [本文轉錄自 NCCU05_STGAR 看板]
今天又跟很多人學到一些 R 的怪招,所以就來波板一下
是關於畫圖的標題(main, xlab, ylab 等)
首先介紹一個好用的函數: paste
這個函數是用來處理字串的連結
參數 sep 的預設是一個空白鍵,是每個字串的分隔(separator)
所以,舉例而言
> paste("測試","一下",sep="")
[1] "測試一下"
> paste("測試","一下",sep="&&&")
[1] "測試&&&一下"
這個函數有個很強的好處
就是它可以被當作其他函數一般,用迴圈、seq()等去操縱與控制
看下面的例子就可以明白
Case.I 畫一張圖,分割成 3x3,每張圖分別是 Normal 隨機變數的 scatter plot
樣本數限定要為 30,60,...,270。並且"要在標題寫清楚樣本數"
遇到這種問題,利用 paste() 函數就可以用一個迴圈寫完
而不是重覆貼九次,然後再用手動調整,這樣很累
par(mfrow=c(3,3))
for(a in seq(30,270,30)) plot(rnorm(a),main=paste("樣本數=",a,sep=""))
Case.II 今天要繪製一百張圖,每一張圖要存檔出去
取名為"test1.jpg","test2.jpg",....,"test100,jpg"
作法也是用迴圈,千萬不要跟自己過不去,用手動存檔、改名
for(a in 1:100)
{
plot(...) #畫想要畫的圖
savePlot(filename=paste("c:\\test",a,sep=""),type="jpg")
}
Case.III 今天遇到一個 1000x1000 的大矩陣,行的變數想要取名為
"data1",...,"data1000"
用手動? 當然不可能
#假設該矩陣叫做 x
colnames(x) = paste("data",1:1000,sep="")
這邊再介紹另一個函數: expression
如果翻開說明,他對於參數的敘述是 "valid R calls, symbols or constants."
這如果沒有仔細找,根本不知道他除了數學式子以外,連畫圖也可以用上
(已經證實余老師不會下面這些用法 XD)
Case.IV 如果想要在標題的名稱上,打上θ,這怎麼做?
plot(rnorm(100),main=expression(theta))
也就是說,expression() 可以把特殊的英文單字轉變為希臘符號: theta => θ
Case.V 如果想要大寫希臘字母怎麼辦?
這作法更妙,只要把英文單字的開頭字母改成大寫
expression() 就會判定成希臘字母大寫
plot(rnorm(100),main=expression(Gamma))
最後,如果標題除了希臘字母,還要打上其他字呢?
很可惜,expression()不能擺在paste()裡面
但是 paste() 卻可以擺在 expression() 裡面
不要問我為什麼,我也希望知道 XD
這問題的解決方法是: expression() 函數本身有一套對付字串的解決之道: 星號*
expression() 的內部要用星號*連結字串
Case.VI 繪圖的標題要寫"測試參數=根號|θ|"
別懷疑,expression() 認得開根號、絕對值、甚至次方
plot(rnorm(100),main=expression("測試參數="*sqrt(abs(theta))))
Case.VII 再舉個例子
plot(rnorm(100,3,10),
main=expression("母體參數"*mu*"=3 "*sigma*"=10 "*sigma^2*"=100"))
希望大家論文都可以畫出漂亮的圖
Reference
[1] 美晴
[2] 佳璋
[3] 柏肯
[4] R 2.4.0
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.167.171.176
※ 編輯: bugle 來自: 218.167.171.176 (05/02 23:27)
推
05/03 00:46, , 1F
05/03 00:46, 1F
推
05/03 01:54, , 2F
05/03 01:54, 2F
→
05/03 01:54, , 3F
05/03 01:54, 3F
推
05/05 15:31, , 4F
05/05 15:31, 4F
→
05/06 17:37, , 5F
05/06 17:37, 5F
推
04/29 14:53, , 6F
04/29 14:53, 6F