R開發隻用GUI,才能成為真正的R開發者;
對于熟悉Rstudio的來說,可能覺得這樣講不公平,其實這才是最大的公平。
RGUI不容易上手,但是一旦熟悉起來就可以“突飛猛進”;而Rstudio很容易上手,其代價就是,熟悉後就隻能原地踏步了,這才是公平。
RGUI倒逼着開發者必須熟悉所有的函數指令及參數,對參數們的熟悉就是R開發的最大“本事”。跨過這個境界之後,就可以熟練編寫腳本了;腳本的熟練可以使開發者如虎添翼,迅速實現R開發的境界升級,即第二重境界。
#RGui
winMenuAdd("***")
winMenuAddItem('***1','***2','****3')
winMenuNames()
#查詢菜單并編輯菜單項目
wmn<-winMenuNames();wmn
winMenuDel(wmn[5])
升級的下一重境界就是第三重境界,該境界就可以實現在RGUI上設計自定義菜單及指令,如下圖:
這就是很普通的RGUI界面,加上開發者自己設計的菜單體系,每次啟動後,自動加載“菜單函數”腳本,馬上使你的開發環境升級。
如果連遊戲功能的代碼都“懶得敲”,就使用“菜單”吧。
雖然有的遊戲很老了,但是可以使用R自行開發喜歡的遊戲,而且很快速;完成之後隻要加載菜單,一步實現,隻是我對遊戲實在不太感冒,閑時“掃雷”、“五子棋”等就夠了。
怎樣将R的自定義函數返回值傳遞給全局變量?
一般對自定義函數的調用方法是這樣的:
aaaa()
or:
ffff(x=12)
這種方式很簡單,實現不需要反饋數據的一些功能的實現;
但是,如果需要将函數的返回值傳遞程序的全局變量,可以通過調用時設置變量的方式實現。
如cc<-aaaa()
or:
eff<-bbbb(x=1,y=9)
怎樣實現自定義函數返回多組值?S3類、S4類的區别
$是S3類的引用方式,@是S4類的引用方式。$比較常用,@比較少用;通常我們的data.frame, list. 向量等用$就可以。
S4也有例如,有個維恩包Vennerable:S4類型,想取得裡面IntersectionSets,信息必須用@符号。
R的自定義函數設置
當一個函數裡需要返回多個值(比如有變量、向量、矩陣)時,要用list,而不是return。
這時如果想提取某個變量的結果,就需要用到$,默認情況下,對于 `list`, `environment` 這兩種對象,`$`可以提取(extract)出裡面的元素。
”環境”(environment)是為了說明R的定位是一個完善、統一的系統,而非其他數據分析軟件那樣作為一個專門、不靈活的附屬工具。
#返回單組數值,隻能使用return()
bbbb<-function(x=1) {
x<-seq(-1,1,0.01)
y<-1/(x*x)
plot(x,y,type='l',tck=0.01,ann=F,lwd=5,col='blue')
grid()
return(x)
}
bbbb
#返回多組數值,必須使用list()
cccc<-function(x=1) {
x<-seq(-10,10,0.1)
y<-1/(x x)
plot(x,y,type='l',tck=0.01,ann=F,lwd=5,col='blue')
grid()
list(x,y)
}
cccc
cccc[[2]]
四大類歸一化處理函數實例
經典的歸一化處理函數包括四種類型:sigmoid, mm, log, zscore;其函數腳本如下。
#要有正負分布,否則沒有意義;
sigmoid<-function(x,a=1){1/(1 exp(-a*x))}
sgm(cc) #[,1]
mm<- function(x) {(x-min(x))/(max(x)-min(x))}
mm<-mm(cc[,1]);mm
lg<- function(x) {log(x,10)/log(max(x),10)}
lg<-lg(cc[,1]);lg
zs<- function(x) {(x-mean(x))/sd(x)}
zs(cc[,1])
#也許因為結果有正負,必須用向量列,不能用df
在自定義函數的基礎上,就可以設計自定義菜單了。
RGUI自定義菜單及其封裝以如下圖所示的菜單項“數據處理”為例,來說明其實現過程。
#添加菜單項
winMenuAdd("數據處理")
#添加菜單子項
winMenuAddItem("數據處理", "數據集載入", "cc<-aaaa()") # "aaaa()"——> "cc<-aaaa()"
winMenuAddItem("數據處理", "數據特征", "bb()")
winMenuAddItem("數據處理", "-", "")
#添加菜單二級子項
winMenuAdd("數據處理/數據轉換")
#添加菜單二級子項的子項
winMenuAddItem("數據處理/數據轉換", "字符串數組轉字符串", " cc()")
winMenuAddItem("數據處理/數據轉換", "時間數組轉時間串", "dd(paste0(cc[[3]][1]))")
#添加菜單子項
winMenuAddItem("數據處理", "數據分析", "cccc()")
winMenuAddItem("數據處理", "數據分析2", "dddd()")
在添加菜單子項的腳本命令中,需要指定“自定義函數”,如前文所述。
需要執行某個功能時,選擇菜單項,然後就會立即被執行相應的功能。下圖就是通過菜單“數據處理”——“數據轉換”——"時間數組轉時間串”的選擇,執行的指令就是paste0(cc[[3]][1])。
RGUI彈出菜單及其封裝
RGUI可以很快速實現彈出菜單,隻是我不太感冒;如果要使用的話,按照如下腳本代碼就可以了。
#彈出菜單
winMenuAdd("$ConsolePopup/數據處理")
winMenuAddItem("$ConsolePopup/數據處理", "數據轉換1", "fff(17)")
winMenuAddItem("$ConsolePopup/數據處理", "數據轉換2", "hhh(y=12)")
效果圖如下,實現及使用方法與前面一樣的。
RGUI菜單擴展使用,可以封裝“代碼片段”,功能更強大
這個思路是對函數封裝的實用化改造過程中發現的,而且更加有用;
如下圖所示,菜單項“可視化分析”的子項“折線彩圖”的代碼片段如下:
#插入菜單項目裡的代碼片段
x<-rnorm(100,10,1)
plot(x,col=rainbow(22))
grid()
x
#代碼片段在菜單實現
actionss<-'x<-rnorm(100,10,1);plot(x,col=rainbow(22));grid();x'
winMenuAddItem("可視化分析",'折線彩圖',actionss)
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!