久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

R語言中cpp擴展支持Rcpp模塊的示例分析

158次閱讀
沒有評論

共計 3137 個字符,預計需要花費 8 分鐘才能閱讀完成。

這期內容當中丸趣 TV 小編將會給大家帶來有關 R 語言中 cpp 擴展支持 Rcpp 模塊的示例分析,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

概述

 Rcpp 包提供 C ++ 類方便 C or C++ 代碼與 R 軟件包進行交互,使用 R 中提供的.Call() 調用界面。Rcpp 提供 R 中的基礎數據類型的 C ++ 類供訪問。包作者可以保持 R 的數據結構而無需與 C ++ 進行不斷的轉換。同時,這些數據結構提供 C ++ 級別的存取。數據類型可以雙向映射。可以從 R 中把數據賦給 C ++, 返回數據從 C ++ 到 R 也完全一樣。下面列出支持的數據類型。

Transfer from R to C++, and from C++ to R

R 數據類型 (SEXP) 與 C ++ 對象是一致的,按照類的衍生關系。所有的 R 類型都支持 (vectors, functions, environment, etc …) 并且每一種對對應到 C ++ 的類對象。例如, numeric vectors 代表類 Rcpp::NumericVector 的實例, environments 代表 Rcpp::Environment, functions 代表 Rcpp::Function, 等等 … 相應的 C++ 庫都提供 Rcpp::wrap 函數,該函數是一個模版函數負責把數據轉換為 SEXP。

這個機制讓使用標準 C ++ 類型實現 C ++ 的邏輯變得非常直接,比如使用 STL 編程然后包裝為 SEXP 返回到 R 中。內部的封裝操作使用高級元編程技術,目前支持的數據類型包括:bool, int, double, size_t, Rbyte, Rcomplex, std::string, STL containers (e.g std::vector) 中 T 可封裝 , STL maps (e.g std::map) 中 T 可封裝, 支持的隱含轉換的任意的類型到 SEXP。反向轉換 (從 R 到 C ++) 通過 Rcpp::as 函數模版進行。

New features

0.7.1 開始, 提供了命名空間 Rcpp。包含主要類 RObject,其他類都是從中繼承而來,處理跟環境 (ENVSXP)相關的操作 , Language 語言 (LANGSXP) 和模版 XPTr 操作外部指針.

0.7.2 和后續版本擴展了這些特征,支持其他的 R 類型實現自動轉換,更聰明地使用模版。

0.8.1 加入的支持使用 modules 直接暴露 C ++ 代碼給 R。對應的 Rcpp-modules 描述更多的細節。

0.8.3 加入 sugar: 表達式模版,允許像 R 中的緊湊矢量化的表達式但是以編譯速度實現,詳情查看 Rcpp-sugar。

0.8.6 特殊函數 cherished for statistics: d/p/q/r-style for most relevant distribution, in a form that is very close to what we d use in R.

0.8.7 加入 ReferenceClasses 支持 in R 2.12.0; 將 S4-based ReferenceClasses in the OO-style of Java or C++ 到 R 語言中。0.9.0 分離 legacy classic API 到 RcppClassic.。

0.10.0 帶來 Rcpp attributes, enhanced modules support and more.。

0.11.0 帶來簡化的 builds for packages using Rcpp,不再需要 link。

Inline use

0.7.0, Rcpp 包含修改的 cfunction,從卓越的 inline package 而來,該包由 Oleg Sklyar 開發。這允許用戶定義 body of a C++ function 像 標準的 R character vector — which is passed to cfunction along with a few other parameters. 該函數然后 builds 完整的 C ++ 源文件 — 然后編譯, 鏈接和載入。這讓 Rcpp interface classes 實現 R 到 C++ 非常容易 — 任何人都可以直接從 R 提示符操作而不需要 Makefiles, configuration settings 等等。

0.8.1, 擴展函數 cxxfunction 被采用 (要求 inline 0.3.5)。該函數使得在 Rcpp 中使用 C ++ 更容易。特殊地,這個強制使用 .Call interface, 加上 Rcpp 名稱空間, 并且設置 exception forwarding。采用 macros BEGIN_RCPP 和 END_RCPP 封閉 user code。

更多的, 通過 cfunction (and cxxfunction), 我們甚至能 call external libraries 然后 linked。

有幾個例包含在包中; 其中一個已被發表到 blog.

這個可以工作在 Windows,如果有 R tools 和 R 安裝并能工作。查看 R -on-Windows FAQ 和其他文檔。

0.10.0, Rcpp attributes 完成,這個比 inline 更為強大和易用 — 查看 Rcpp attributes 獲取細節信息。

Unit testing

在版本 0.11.5, 超過 470 單元測試函數調用 928 個單元測試確保 API 兼容性。單元測試同時也是適用的的例子。A vignette is auto-generated with the results of the unit tests.

Usage for package building

Rcpp 提供主要的頭文件 Rcpp.h 和 library,在安裝包目錄的 lib 中。在 R 中, 計算目錄位置通過 system.file(lib , Rcpp.h , package= Rcpp)– 但同時提供通過函數 Rcpp::RcppCxxFlags()and Rcpp::RcppLdFlags()。因此可以調用像下面的形式 src/Makevars (or src/Makevars.win on Windows)

PKG_CXXFLAGS=`${R_HOME}/bin/Rscript -e  Rcpp:::CxxFlags() `
PKG_LIBS=`${R_HOME}/bin/Rscript -e  Rcpp:::LdFlags() `

查看 Rcpp-package 了解細節。并注意從 0.8.0 版本開始,LinkingTo 參數可以在 Rcpp 的包中使用。這讓 R 可以確定頭文件的位置,并且用戶只需要使用 Rcpp::RcppLdFlags() (as detailed above) 指向實際的庫

這顯然是值得推薦的方法。此外,我們還添加了關于如何在包中使用 Rcpp 的完整小插曲,并進行了詳細討論。還請注意,RCPP 屬性的小插曲詳細說明了另一種方法。

Rcpp 手冊

圖書無縫 R 和 C ++ 集成與 Rcpp(Spriger-2013)為 Rcpp 提供了完整和完整的文檔,以及許多示例。這里有更多信息。這本書可以直接從斯普林格拉斯、亞馬遜和其他書商那里訂購。

Rcpp 畫廊

Rcpp 圖庫為 Rcpp 重新整理了 50 多篇文章和示例。它對用戶貢獻是開放的。

演示包

RcppExamples 包(在 CRAN 上)提供了如何使用 Rcpp 的簡單說明,還可以用作部署 Rcpp 的框架。然而,這個包在示例方面有些不完整,因此請參見下面幾十個使用 Rcpp 的包提供的示例。

類文檔

我們現在有了 Doxygen 生成的所有類的文檔,這些類在可瀏覽和可搜索的 htmland 中作為 apdf 文件。我們不再在源 tarball 中包含 Doxygen 生成的文檔,因為它太大了。但我們有 HTML、latex 和 MAN 文檔的 zip 存檔。

上述就是丸趣 TV 小編為大家分享的 R 語言中 cpp 擴展支持 Rcpp 模塊的示例分析了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-25發表,共計3137字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 界首市| 吐鲁番市| 荆门市| 治多县| 丹阳市| 徐闻县| 扎囊县| 浦江县| 威宁| 东莞市| 南部县| 项城市| 龙南县| 大埔区| 徐州市| 沐川县| 东安县| 周口市| 伊川县| 普安县| 布尔津县| 墨江| 东平县| 广宗县| 松桃| 赣州市| 信阳市| 六盘水市| 莱芜市| 子洲县| 晋宁县| 奎屯市| 尖扎县| 沈阳市| 桃源县| 永顺县| 潢川县| 怀远县| 吉木乃县| 怀安县| 潍坊市|