溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何在RStudio中創(chuàng)建C++文件

發(fā)布時(shí)間:2021-11-06 17:21:46 來源:億速云 閱讀:173 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要介紹了如何在RStudio中創(chuàng)建C++文件,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

在RStudio中創(chuàng)建C++文件

這里默認(rèn)大家都安裝了RStudio,我們都從里面創(chuàng)建一個(gè)C++文件,從這里創(chuàng)建有個(gè)好處,就是它直接會(huì)顯示一段示例代碼,我們只需在上面稍作改動(dòng)即可。

首先我們?cè)?code>RStudio中選擇:文件——新文件——C++文件,創(chuàng)建完一個(gè)新文件,里面是如下的內(nèi)容(這里要在R中安裝Rcpp包,沒安裝的話,點(diǎn)到這里RStudio會(huì)自動(dòng)幫忙進(jìn)行安裝):

#include <Rcpp.h>
using namespace Rcpp;

// This is a simple example of exporting a C++ function to R. You can
// source this function into an R session using the Rcpp::sourceCpp 
// function (or via the Source button on the editor toolbar). Learn
// more about Rcpp at:
//
//   http://www.rcpp.org/
//   http://adv-r.had.co.nz/Rcpp.html
//   http://gallery.rcpp.org/
//
// [[Rcpp::export]]
NumericVector timesTwo(NumericVector x) {
  return x * 2;
}
// You can include R code blocks in C++ files processed with sourceCpp
// (useful for testing and development). The R code will be automatically 
// run after the compilation.
//
/*** R
timesTwo(42)
*/

我們按照上面的英文說明一行一行來進(jìn)行理解。

詳細(xì)說明

#include <Rcpp.h>
using namespace Rcpp;

這個(gè)是頭文件,以及使用Rcpp命名空間。正常的一個(gè)C++代碼開頭兩行其實(shí)也是這樣,這其實(shí)非常像我們R中的library以及Python中的import,有了這個(gè),我們就可以在代碼中命名向量、矩陣、數(shù)據(jù)框等一些R中才有的對(duì)象形式,以便于R與C++中的一些內(nèi)容的相互傳遞。

示例文件中的代碼其實(shí)就是命名了一個(gè)輸入與輸出對(duì)象均為數(shù)值向量的函數(shù)。這個(gè)函數(shù)也非常簡單:一個(gè)將向量乘以2的運(yùn)算。

如果我們想在R中使用在C++文件中定義好的函數(shù),需要在C++里面函數(shù)的上方加上// [[Rcpp::export]]。需要注意的是,一個(gè)cpp文件可以在里面定義多個(gè)函數(shù),但只能傳出一個(gè)函數(shù)。

然后我們?cè)冱c(diǎn)擊文件右上方的Source,即可將我們的函數(shù)載入進(jìn)變量空間,或直接在另一個(gè)R腳本文件中運(yùn)行下述命令:

Rcpp::sourceCpp('Desktop/myfun.cpp')

在示例文件中還有另一個(gè)trick,就是直接在我們的cpp文件中加上了下面這句命令:

/*** R
timesTwo(42)
*/

加上這句之后,我們Source這個(gè)文件后,可以直接測(cè)試剛剛定義的函數(shù),看看timesTwo(42)的運(yùn)行結(jié)果,平時(shí)在測(cè)試的時(shí)候可以多多使用。

更多內(nèi)容

關(guān)于Rcpp里面的一些常用數(shù)據(jù)類型與常用函數(shù),可以參考博客:Rcpp相關(guān)知識(shí)整理,里面講的很好。這里搬運(yùn)一些內(nèi)容過來:

數(shù)據(jù)類型描述
int整數(shù)型
double數(shù)值型
bool布爾型(TRUE, FALSE)
String字符型
IntegerVector整型向量
NumericVector數(shù)值型向量(元素的類型為double)
ComplexVector復(fù)數(shù)向量
LogicalVector邏輯型向量; R的邏輯型變量可以取三種值:TRUE, FALSE, NA; 而C++布爾值只有兩個(gè),true or false。如果將R的NA轉(zhuǎn)化為C++中的布爾值,則會(huì)返回true。
CharacterVector字符型向量
IntegerMatrix整型矩陣
NumericMatrix數(shù)值型矩陣(元素的類型為double)
LogicalMatrix邏輯型矩陣
CharacterMatrix字符矩陣
List列表;lists;類似于R中列表,其元素可以使任何數(shù)據(jù)類型
DataFrame數(shù)據(jù)框;data frames;在Rcpp內(nèi)部,數(shù)據(jù)框其實(shí)是通過列表實(shí)現(xiàn)的
Function函數(shù)型
Environment環(huán)境型;可用于引用R環(huán)境中的函數(shù)、其他R包中的函數(shù)、操作R環(huán)境中的變量
RObject可以被R識(shí)別的類型

關(guān)于對(duì)矩陣以及數(shù)據(jù)框的一些基礎(chǔ)操作與常用函數(shù):

操作描述
[n]對(duì)于向量類型或者列表,訪問第n個(gè)元素。對(duì)于矩陣類型,首先把矩陣的下一列接到上一列之下,從而構(gòu)成一個(gè)長列向量,并訪問第n個(gè)元素。不同于R,n從0開始。
(i,j)對(duì)于矩陣類型,訪問第(i,j)個(gè)元素。不同于R,i和j從0開始。不同于向量,此處用圓括號(hào)。
List[“name1”]訪問List中名為name1的元素。
DataFrame[“name2”]訪問DataFrame中,名為name2的列。
X.size()返回X的長度;適用于向量或者矩陣,如果是矩陣,則先向量化
X.push_back(a)將a添加進(jìn)X的末尾;適用于向量
X.push_front(b)將b添加進(jìn)X的開頭;適用于向量
X.ncol()返回X的列數(shù)
X.nrow()返回X的行數(shù)

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“如何在RStudio中創(chuàng)建C++文件”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI