有很多从R向C++发送整数的例子,但我找不到发送字符串的例子.
我想做的很简单:
SEXP convolve(SEXP filename){
pfIn = fopen(filename, "r");
}
Run Code Online (Sandbox Code Playgroud)
这给了我以下编译器错误:
loadFile.cpp:50:错误:无法将参数
'1'的'SEXPREC*'转换为'const char*'为'FILE*fopen(const char*,const char*)'
所以我需要将文件名转换为const char*?我使用CHAR吗?
这是一个使用R内部的方法:
#include <R.h>
#include <Rdefines.h>
SEXP convolve(SEXP filename){
printf("Your string is %s\n",CHAR(STRING_ELT(filename,0)));
return(filename);
}
Run Code Online (Sandbox Code Playgroud)
用R CMD SHLIB foo.c编译,然后用dyn.load("foo.so")和.Call("convolve","hello world")编译
注意它获取传入的SEXP的第一个(第0个)元素并获取字符串元素并且CHAR转换它.主要来自Writing R Extensions指南.
巴里
Shane使用环境显示了一个很好的技巧,但Chris真的要求hot将一个字符串从R发送到C++作为参数.那么让我们回答一下使用Rcpp和inline:
R> fun <- cxxfunction(signature(x="character"), plugin="Rcpp", body='
+ std::string s = as<std::string>(x);
+ return wrap(s+s); // just to return something: concatenate it
+ ')
R> fun("abc")
[1] "abcabc"
R>
Run Code Online (Sandbox Code Playgroud)
这显示了模板化帮助器as<T>(从R获取东西)和补偿wrap()返回R.如果你使用Rcpp,那就是它的全部内容.
| 归档时间: |
|
| 查看次数: |
1820 次 |
| 最近记录: |