您好,登錄后才能下訂單哦!
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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。