ITPub博客

首页 > > > Rcpp高性能计算(三):输出字符(Hello World!)

Rcpp高性能计算(三):输出字符(Hello World!)

作者:浪花小雨滴 时间:2020-06-25 16:54:52 0 删除 编辑

作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(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++代码需要在最外面用单引号。

原文作者:;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    40075