R语言及其扩展的开发是怎样的

发布时间:2021-11-22 11:02:47 作者:柒染
来源:亿速云 阅读:127

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的交互支持:

R语言及其扩展的开发是怎样的

Vim-r

R语言及其扩展的开发是怎样的

作为KDE桌面的原生程序,RKWard提供了良好的IDE体验!

R语言及其扩展的开发是怎样的

使用

这里我们推荐读者参考R的官方参考手册。

为什么使用R

为什么要使用R?撇开R是自由软件不说,还有以下原因:

编写扩展

在上文提及了R有良好的语言绑定,其中扩展包Rcpp方便用户使用C++来开发扩展。我们使用Rcpp开发了两个实验性的项目RcppKmeans和RcppNaiveBayes,用于数据挖掘的研究。

创建基于Rcpp扩展

显然,我们需要安装Rcpp,注意确保GCC和R的开发环境是完备的:

install.packages("Rcpp")

转移到你的工作目录

library(Rcpp) 
Rcpp.package.skeleton("MyProjectName")

OK! MyProjectName的骨架建好了,开始写代码!等等,建议按照目录里的Read-and-delete-me的指示走一遍。

RcppKmeans

为一简单的用于文本的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")被孤立,而剩余的则归入第一个聚类。

RcppNaivebayes

为一简单的用于文本的分类器,本身不应用并行技术,但提供的接口可以与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语言及其扩展的开发是怎样的问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

推荐阅读:
  1. 什么是r语言
  2. redis是如何开发的

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

r语言

上一篇:JSP中中文乱码如何处理

下一篇:c语言怎么实现含递归清场版扫雷游戏

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》