网络知识 娱乐 R程序员的开发升级——随意脚本及自主菜单封装

R程序员的开发升级——随意脚本及自主菜单封装

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

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

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

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

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

#RGuinwinMenuAdd("***")nwinMenuAddItem('***1','***2','****3')nwinMenuNames()nn#查询菜单并编辑菜单项目nwmn<-winMenuNames();wmnnwinMenuDel(wmn[5])nn

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

R程序员的开发升级——随意脚本及自主菜单封装

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

R程序员的开发升级——随意脚本及自主菜单封装

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

R程序员的开发升级——随意脚本及自主菜单封装

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

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()nbbbb<-function(x=1) {nx<-seq(-1,1,0.01) ny<-1/(x*x)nplot(x,y,type='l',tck=0.01,ann=F,lwd=5,col='blue')ngrid()nreturn(x)n}nnbbbbnn


R程序员的开发升级——随意脚本及自主菜单封装




#返回多组数值,必须使用list()ncccc<-function(x=1) {nx<-seq(-10,10,0.1) ny<-1/(x+x)nplot(x,y,type='l',tck=0.01,ann=F,lwd=5,col='blue')ngrid()nlist(x,y)n}nnccccncccc[[2]]nn


R程序员的开发升级——随意脚本及自主菜单封装


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

经典的归一化处理函数包括四种类型:sigmoid, mm, log, zscore;其函数脚本如下。

#要有正负分布,否则没有意义;nsigmoid<-function(x,a=1){1/(1+exp(-a*x))}nsgm(cc) #[,1]nnmm<- function(x) {(x-min(x))/(max(x)-min(x))}nmm<-mm(cc[,1]);mmnnlg<- function(x) {log(x,10)/log(max(x),10)}nlg<-lg(cc[,1]);lgnnzs<- function(x) {(x-mean(x))/sd(x)}nzs(cc[,1]) n#也许因为结果有正负,必须用向量列,不能用dfn

在自定义函数的基础上,就可以设计自定义菜单了。


RGUI自定义菜单及其封装

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

R程序员的开发升级——随意脚本及自主菜单封装

#添加菜单项nwinMenuAdd("数据处理")n#添加菜单子项nwinMenuAddItem("数据处理", "数据集载入", "cc<-aaaa()") # "aaaa()"——> "cc<-aaaa()" nwinMenuAddItem("数据处理", "数据特征", "bb()")nwinMenuAddItem("数据处理", "-", "")n#添加菜单二级子项nwinMenuAdd("数据处理/数据转换")n#添加菜单二级子项的子项nwinMenuAddItem("数据处理/数据转换", "字符串数组转字符串", " cc()")nwinMenuAddItem("数据处理/数据转换", "时间数组转时间串", "dd(paste0(cc[[3]][1]))")n#添加菜单子项nwinMenuAddItem("数据处理", "数据分析", "cccc()")nwinMenuAddItem("数据处理", "数据分析2", "dddd()")nn

在添加菜单子项的脚本命令中,需要指定“自定义函数”,如前文所述。

需要执行某个功能时,选择菜单项,然后就会立即被执行相应的功能。下图就是通过菜单“数据处理”——“数据转换”——"时间数组转时间串”的选择,执行的指令就是paste0(cc[[3]][1])。

R程序员的开发升级——随意脚本及自主菜单封装


RGUI弹出菜单及其封装

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

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

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

R程序员的开发升级——随意脚本及自主菜单封装

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

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

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

#插入菜单项目里的代码片段nx<-rnorm(100,10,1)nplot(x,col=rainbow(22))ngrid()nxnR程序员的开发升级——随意脚本及自主菜单封装

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

返回顶部