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自行开发喜欢的游戏,而且很快速;完成之后只要加载菜单,一步实现,只是我对游戏实在不太感冒,闲时“扫雷”、“五子棋”等就够了。
一般对自定义函数的调用方法是这样的:
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` 这两种对象,`
”环境”(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
在自定义函数的基础上,就可以设计自定义菜单了。
以如下图所示的菜单项“数据处理”为例,来说明其实现过程。
#添加菜单项
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可以很快速实现弹出菜单,只是我不太感冒;如果要使用的话,按照如下脚本代码就可以了。
#弹出菜单
winMenuAdd("$ConsolePopup/数据处理")
winMenuAddItem("$ConsolePopup/数据处理", "数据转换1", "fff(17)")
winMenuAddItem("$ConsolePopup/数据处理", "数据转换2", "hhh(y=12)")
效果图如下,实现及使用方法与前面一样的。
这个思路是对函数封装的实用化改造过程中发现的,而且更加有用;
如下图所示,菜单项“可视化分析”的子项“折线彩图”的代码片段如下:
#插入菜单项目里的代码片段
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)
留言与评论(共有 0 条评论) “” |