这篇文章主要介绍了如何在RStudio中创建C++文件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
这里默认大家都安装了RStudio
,我们都从里面创建一个C++文件,从这里创建有个好处,就是它直接会显示一段示例代码,我们只需在上面稍作改动即可。
首先我们在RStudio
中选择:文件
——新文件
——C++文件
,创建完一个新文件,里面是如下的内容(这里要在R中安装Rcpp
包,没安装的话,点到这里RStudio
会自动帮忙进行安装):
#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) */
我们按照上面的英文说明一行一行来进行理解。
#include <Rcpp.h> using namespace Rcpp;
这个是头文件,以及使用Rcpp
命名空间。正常的一个C++代码开头两行其实也是这样,这其实非常像我们R中的library
以及Python中的import
,有了这个,我们就可以在代码中命名向量、矩阵、数据框等一些R中才有的对象形式,以便于R与C++中的一些内容的相互传递。
示例文件中的代码其实就是命名了一个输入与输出对象均为数值向量的函数。这个函数也非常简单:一个将向量乘以2的运算。
如果我们想在R中使用在C++文件中定义好的函数,需要在C++里面函数的上方加上// [[Rcpp::export]]
。需要注意的是,一个cpp文件可以在里面定义多个函数,但只能传出一个函数。
然后我们再点击文件右上方的Source
,即可将我们的函数载入进变量空间,或直接在另一个R脚本文件中运行下述命令:
Rcpp::sourceCpp('Desktop/myfun.cpp')
在示例文件中还有另一个trick,就是直接在我们的cpp
文件中加上了下面这句命令:
/*** R timesTwo(42) */
加上这句之后,我们Source
这个文件后,可以直接测试刚刚定义的函数,看看timesTwo(42)
的运行结果,平时在测试的时候可以多多使用。
关于Rcpp里面的一些常用数据类型与常用函数,可以参考博客:Rcpp相关知识整理,里面讲的很好。这里搬运一些内容过来:
数据类型 | 描述 |
---|---|
int | 整数型 |
double | 数值型 |
bool | 布尔型(TRUE, FALSE) |
String | 字符型 |
IntegerVector | 整型向量 |
NumericVector | 数值型向量(元素的类型为double) |
ComplexVector | 复数向量 |
LogicalVector | 逻辑型向量; R的逻辑型变量可以取三种值:TRUE, FALSE, NA; 而C++布尔值只有两个,true or false。如果将R的NA转化为C++中的布尔值,则会返回true。 |
CharacterVector | 字符型向量 |
IntegerMatrix | 整型矩阵 |
NumericMatrix | 数值型矩阵(元素的类型为double) |
LogicalMatrix | 逻辑型矩阵 |
CharacterMatrix | 字符矩阵 |
List | 列表;lists;类似于R中列表,其元素可以使任何数据类型 |
DataFrame | 数据框;data frames;在Rcpp内部,数据框其实是通过列表实现的 |
Function | 函数型 |
Environment | 环境型;可用于引用R环境中的函数、其他R包中的函数、操作R环境中的变量 |
RObject | 可以被R识别的类型 |
关于对矩阵以及数据框的一些基础操作与常用函数:
操作 | 描述 |
---|---|
[n] | 对于向量类型或者列表,访问第n个元素。对于矩阵类型,首先把矩阵的下一列接到上一列之下,从而构成一个长列向量,并访问第n个元素。不同于R,n从0开始。 |
(i,j) | 对于矩阵类型,访问第(i,j)个元素。不同于R,i和j从0开始。不同于向量,此处用圆括号。 |
List[“name1”] | 访问List中名为name1的元素。 |
DataFrame[“name2”] | 访问DataFrame中,名为name2的列。 |
X.size() | 返回X的长度;适用于向量或者矩阵,如果是矩阵,则先向量化 |
X.push_back(a) | 将a添加进X的末尾;适用于向量 |
X.push_front(b) | 将b添加进X的开头;适用于向量 |
X.ncol() | 返回X的列数 |
X.nrow() | 返回X的行数 |
感谢你能够认真阅读完这篇文章,希望小编分享的“如何在RStudio中创建C++文件”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。