作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量、机器学习、数据可视化、应用统计建模、知识图谱等,著有《R语言高效数据处理指南》(《R语言数据高效处理指南》(黄天元)【摘要 书评 试读】- 京东图书)。知乎专栏:R语言数据挖掘。邮箱:huang.tian-yuan@qq.com.欢迎合作交流。
每一个编程语言都有自己的Hello World,而Rcpp也可以。这里我们找到了其输出字符串的两个函数,进行尝试,顺便介绍一下基础。首先运行以下代码直接走向Hello World:
library(pacman)
p_load(Rcpp)
src <-
'#include <Rcpp.h> //头文件
using namespace Rcpp; //使用命名空间
// [[Rcpp::export]]
void rcpp_hw(){
Rcout << "Hello World!";
}'
sourceCpp(code = src)
rcpp_hw()
src是我们的C++代码部分,包括一个头文件(声明用了Rcpp)、命名空间(相当于R中的library,如果没有就必须用Rcpp::表示命名空间)和一个返回空(void)的函数。首先记得代码写完要加分号(;),其次记得如果想要让函数作为R函数输出要在函数前加“// [[Rcpp::export]]”这个注释。后,在R中我们用sourceRcpp来对这段代码进行编译,它就能够直接运行了。
又是命名空间,又是头文件还要输出,实在太麻烦,其实可以直接使用cppFuction函数节省这些步骤,代码如下:
cppFunction('
void rcpp_hw(){
Rcout << "Hello World!";
}
')
此外,输出函数还可以这样写:
cppFunction('
void rcpp_hw(){
Rprintf("Hello World!");
}
')
感觉Rprintf更为方便。这些输出函数在使用Rcpp需要输出字符串的时候(特别是结合数据来做输出),将会十分有用。
参考链接:Chapter 6 Printing messages | Rcpp for everyone
PS:为什么要用单引号?因为如果不用,C++中的双引号就要挂掉了,所以一定要注意,写C++代码需要在外面用单引号。