R 的字串控制

看板NCCU06_STGAR作者 (Why not me ....)時間17年前 (2007/05/02 23:04), 編輯推噓4(402)
留言6則, 5人參與, 最新討論串1/1
※ [本文轉錄自 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
bb是個人才XD
05/03 01:54, 3F


05/06 17:37, , 5F
-.-...王俊欽真的吃飽營營....
05/06 17:37, 5F

04/29 14:53, , 6F
一年之後 果然受用無窮阿!!!
04/29 14:53, 6F
文章代碼(AID): #16EAXmKx (NCCU06_STGAR)