R语言高级开发程序员炼成记-脚本代码进阶及自主菜单封装

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语言高级开发程序员炼成记——脚本代码进阶及自主菜单封装

这就是很普通的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` 这两种对象,`R语言高级开发程序员炼成记-脚本代码进阶及自主菜单封装-今日头条可以提取(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语言高级开发程序员炼成记——脚本代码进阶及自主菜单封装




#返回多组数值,必须使用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语言高级开发程序员炼成记——脚本代码进阶及自主菜单封装


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

经典的归一化处理函数包括四种类型: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语言高级开发程序员炼成记——脚本代码进阶及自主菜单封装

#添加菜单项
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语言高级开发程序员炼成记——脚本代码进阶及自主菜单封装


RGUI弹出菜单及其封装

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

#弹出菜单

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

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

R语言高级开发程序员炼成记——脚本代码进阶及自主菜单封装

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

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

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

#插入菜单项目里的代码片段
x<-rnorm(100,10,1)
plot(x,col=rainbow(22))
grid()
x
R语言高级开发程序员炼成记——脚本代码进阶及自主菜单封装

#代码片段在菜单实现

actionss<-'x<-rnorm(100,10,1);plot(x,col=rainbow(22));grid();x'

winMenuAddItem("可视化分析",'折线彩图',actionss)

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章