R语言及其扩展的开发是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
R是一门主要用于统计分析、绘图的语言和环境,是S语言的一种实现,但R的语法却是来自Scheme,是一种面向对象、支持反射的函数式脚本语言。
R本来是由来自新西兰奥克兰大学的Ross Ihaka和Robert Gentleman开发,随即成为GNU的项目之一,现在由R开发核心团队''负责开发。R现在支持多种平台,包括GNU/Linux、FreeBSD、Windows和MacOS。
与其它商业统计软件不同,R主要的用户交互接口是R解析器。用户可以与R如同与shell一般灵活交互,也可以通过脚本向R提交作业。R提供 libR.so共享对象,开发者可以设计GUI前端并与之连接,这样既能够提供R解析器接口又能提供丰富的菜单功能和其它作业方式。
在*nix上,vim和(x)emacs是著名的两大编辑器,相应地,开发者提供了R的交互支持:
ESS (Emacs Speaks Statistics)
Vim-r
作为KDE桌面的原生程序,RKWard提供了良好的IDE体验!
这里我们推荐读者参考R的官方参考手册。
为什么要使用R?撇开R是自由软件不说,还有以下原因:
R逐渐成为统计软件的事实标准,在很多方面已经赶上甚至超越SAS和SPSS等商业软件。
R的语法简答而清晰
R的效率很高(主要取决于BLAS的实现)
CRAN有丰富的扩展包
除了原生的C接口,R还有良好的语言绑定,如C++,Java,方便用户设计自己的计算敏感的程序
R支持OpenMP和OpenMPI等并行基础,适合计算敏感的场合
在上文提及了R有良好的语言绑定,其中扩展包Rcpp方便用户使用C++来开发扩展。我们使用Rcpp开发了两个实验性的项目RcppKmeans和RcppNaiveBayes,用于数据挖掘的研究。
显然,我们需要安装Rcpp,注意确保GCC和R的开发环境是完备的:
install.packages("Rcpp")
转移到你的工作目录
library(Rcpp) Rcpp.package.skeleton("MyProjectName")
OK! MyProjectName的骨架建好了,开始写代码!等等,建议按照目录里的Read-and-delete-me的指示走一遍。
为一简单的用于文本的kmeans聚类器,通过应用OpenMP技术,在多核平台上利用并行带来的优势。
git clone git://github.com/ucweb/RcppKmeans.git R CMD INSTALL RcppKmeans
1 library(RcppKmeans) 2 # 9 个点 3 s <- list( 4 c("a", "a", "b", "b" ), 5 c("b", "b", "a", "c"), 6 c("e", "e", "f", "f"), 7 c("t", "t", "f", "f"), 8 c("s", "t", "h", "f"), 9 c("s", "t", "h", "f"), 10 c("s", "t", "h", "f"), 11 c("s", "t", "h", "f"), 12 c("s", "h", "t", "f")) 13 Kmeans(s,4L,1e3L,0.25)
输出:
$clusters $clusters[[1]] [1] 7 4 5 6 8 $clusters[[2]] [1] 1 0 $clusters[[3]] [1] 2 $clusters[[4]] [1] 3 $iterations [1] 2 $divergent integer(0)
输出结果说明:
c("a", "a", "b", "b" )和 c("b", "b", "a", "c")被归入第二个聚类,c("e", "e", "f", "f")和c("t", "t", "f", "f")被孤立,而剩余的则归入第一个聚类。
为一简单的用于文本的分类器,本身不应用并行技术,但提供的接口可以与Rmpi一同使用,从而实现并行处理。
git clone git://github.com/ucweb/RcppNaiveBayes.git R CMD INSTALL RcppNaiveBayes
1 library(RcppNaiveBayes) 2 3 a <- list(c("A", "B", "B", "D", "A", "Z"), 4 c("C", "B", "C", "Z", "H")) 5 b <- list(c("A", "F", "Y", "F", "W"), 6 c("I", "A", "G", "F", "P", "D"), 7 c("G", "A", "N", "P")) 8 d <- list(c("Y", "D", "P"), 9 c("H", "H"), 10 c("Z", "Z")) 11 m <- NaiveBayesTrain(list(a,b)) # 训练两个类别 12 NaiveBayesPredict(m, d)
输出:
$scores $scores[[1]] [1] 0.1000000 0.2666667 $scores[[2]] [1] 0.40000000 0.06666667 $scores[[3]] [1] 0.90000000 0.06666667 $predicted [1] 2 1 1 attr(,"class") [1] "RcppNaiveBayesPredict"
输出结果说明:
$predicted的值为d各元素被归入的类别,即c("Y", "D", "P")以分值0.2666667>0.1000000而归入类别b;同理,c("Z", "Z")被归入类别a。
R是一门十分容易掌握的语言,加之扩展的便捷开发,它迅速在计算相关领域日益得到重视,很多企业级的应用也有R的一席之地。然而R并非万能,加之并行计算并没有统一模式,以及数据规模的爆炸性增长给予R的in-memory计算方式极大的冲击。如果要将R应用于大数据领域,那么还有一段路要走,尽管商业方案的RevoScale提供了解决之道。
关于R语言及其扩展的开发是怎样的问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。