2

我是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。

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

4

1 回答 1

2

从某种意义上说,这是一个错误,因为我们可以支持单个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 无论如何都只有向量类型。

于 2013-05-14T10:20:35.020 回答