繁体   English   中英

从R到C ++发送字符串

[英]Sending a string from R to C++

有很多从R向C ++发送整数的例子,但我找不到发送字符串的例子。

我想做的很简单:

SEXP convolve(SEXP filename){
  pfIn = fopen(filename, "r");
}

这给了我以下编译器错误:

loadFile.cpp:50:错误:无法将'SEXPREC *'转换为'const char *'作为参数
'1'到'FILE * fopen(const char *,const char *)'

所以我需要将filename转换为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);

}

用R CMD SHLIB foo.c编译,然后用dyn.load(“foo.so”)和.Call(“convolve”,“hello world”)编译

注意它获取传入的SEXP的第一个(第0个)元素并获取字符串元素并且CHAR转换它。 主要来自Writing R Extensions指南。

巴里

Shane使用环境显示了一个很好的技巧,但Chris真的要求hot将一个字符串从R发送到C ++作为参数。 那么让我们回答一下使用Rcppinline

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> 

这表示模板化帮助器as<T> (从R获取东西)和补丁 wrap()返回到R.如果使用Rcpp ,那就是它的全部内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM