R开发的三重境界——语法、脚本及自主菜单封装

R开发只用GUI,才能成为真正的R开发者;

对于熟悉Rstudio的来说,可能觉得这样讲不公平,其实这才是最大的公平。

RGUI不容易上手,但是一旦熟悉起来就可以“突飞猛进”;而Rstudio很容易上手,其代价就是,熟悉后就只能原地踏步了,这才是公平。

RGUI倒逼着开发者必须熟悉所有的函数指令及参数,对参数们的熟悉就是R开发的最大“本事”。跨过这个境界之后,就可以熟练编写脚本了;脚本的熟练可以使开发者如虎添翼,迅速实现R开发的境界升级,即第二重境界。

#RGui winMenuAdd("***") winMenuAddItem('***1','***2','****3') winMenuNames() #查询菜单并编辑菜单项目 wmn<-winMenuNames();wmn winMenuDel(wmn[5])

升级的下一重境界就是第三重境界,该境界就可以实现在RGUI上设计自定义菜单及指令,如下图:

r语言运行所有代码的快捷键(R语言高级开发程序员炼成记)(1)

这就是很普通的RGUI界面,加上开发者自己设计的菜单体系,每次启动后,自动加载“菜单函数”脚本,马上使你的开发环境升级。

r语言运行所有代码的快捷键(R语言高级开发程序员炼成记)(2)

如果连游戏功能的代码都“懒得敲”,就使用“菜单”吧。

r语言运行所有代码的快捷键(R语言高级开发程序员炼成记)(3)

虽然有的游戏很老了,但是可以使用R自行开发喜欢的游戏,而且很快速;完成之后只要加载菜单,一步实现,只是我对游戏实在不太感冒,闲时“扫雷”、“五子棋”等就够了。

r语言运行所有代码的快捷键(R语言高级开发程序员炼成记)(4)

怎样将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


r语言运行所有代码的快捷键(R语言高级开发程序员炼成记)(5)


#返回多组数值,必须使用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]]

r语言运行所有代码的快捷键(R语言高级开发程序员炼成记)(6)

四大类归一化处理函数实例

经典的归一化处理函数包括四种类型: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自定义菜单及其封装

以如下图所示的菜单项“数据处理”为例,来说明其实现过程。

r语言运行所有代码的快捷键(R语言高级开发程序员炼成记)(7)

#添加菜单项 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])。

r语言运行所有代码的快捷键(R语言高级开发程序员炼成记)(8)

RGUI弹出菜单及其封装

RGUI可以很快速实现弹出菜单,只是我不太感冒;如果要使用的话,按照如下脚本代码就可以了。

#弹出菜单 winMenuAdd("$ConsolePopup/数据处理") winMenuAddItem("$ConsolePopup/数据处理", "数据转换1", "fff(17)") winMenuAddItem("$ConsolePopup/数据处理", "数据转换2", "hhh(y=12)")

效果图如下,实现及使用方法与前面一样的。

r语言运行所有代码的快捷键(R语言高级开发程序员炼成记)(9)

RGUI菜单扩展使用,可以封装“代码片段”,功能更强大

这个思路是对函数封装的实用化改造过程中发现的,而且更加有用;

如下图所示,菜单项“可视化分析”的子项“折线彩图”的代码片段如下:

#插入菜单项目里的代码片段 x<-rnorm(100,10,1) plot(x,col=rainbow(22)) grid() x

r语言运行所有代码的快捷键(R语言高级开发程序员炼成记)(10)

#代码片段在菜单实现 actionss<-'x<-rnorm(100,10,1);plot(x,col=rainbow(22));grid();x' winMenuAddItem("可视化分析",'折线彩图',actionss)

,