Rcpp:如何在函数中设置字符参数?

时间:2013-05-14 05:41:57

标签: r rcpp

我是Rcpp的初学者。 我可以问一个非常基本的问题吗?以下是简单的代码:

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
int test(char d) {
char c;
c=d;
return 0;
}

但是当我尝试编译它时,我总是得到如下错误:

/usr/local/genomics/programs/R-3.0.0/library/Rcpp/include/Rcpp/as.h: In function ‘T   Rcpp::internal::as_string(SEXPREC*, Rcpp::traits::false_type) [with T = char]’:
/usr/local/genomics/programs/R-3.0.0/library/Rcpp/include/Rcpp/as.h:66:   instantiated from ‘T Rcpp::internal::as(SEXPREC*, Rcpp::traits::r_type_string_tag) [with T = char]’
/usr/local/genomics/programs/R-3.0.0/library/Rcpp/include/Rcpp/as.h:126:   instantiated from ‘T Rcpp::as(SEXPREC*) [with T = char]’
test1.cpp:18:   instantiated from here
/usr/local/genomics/programs/R-3.0.0/library/Rcpp/include/Rcpp/as.h:62: error: invalid conversion from ‘const char*’ to ‘char’
make: *** [test1.o] Error 1
g++ -I/usr/local/genomics/programs/R-3.0.0/include -DNDEBUG  -I/usr/local/include  -I"/usr/local/genomics/programs/R-3.0.0/library/Rcpp/include"    -fpic  -g -O2  -c test1.cpp -o test1.o

sourceCpp(“test1.cpp”)中的错误:    构建共享库时出现错误1。

你能告诉我发生了什么吗?非常感谢你!

1 个答案:

答案 0 :(得分:1)

在某种程度上,这是一个我们可以支持单个char对象的错误。

另一方面,它没关系,因为你可以用一个char来做很少的有用的东西。如果您使用int而不是

,它就会起作用
#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
int mytest(int d) {
  int c;
  c=d;
  return 0;
}

或者更好的是,使用string类型:

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
int mytest(std::string d) {
  std::string c;
  c=d;
  return 0;
}

当你使用Rcpp自己的类型CharacterVector时,它确实有效。

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
int mytest(CharacterVector d) {
  CharacterVector c;
  c=d;
  return 0;
}

单个char变量在C和C ++中有点奇怪(你需要它们的数组或指针)来表达“单词”。所以没有真正的用途来解决这个问题,因为无论如何R只有矢量类型。