糖全部()行的Rcpp错误

时间:2013-05-15 06:58:06

标签: c++ r header compiler-errors rcpp

我用Rcpp和C ++为R编写了一些代码,试图让它更熟悉它:

#include <Rcpp.h>
#include <vector>

using namespace Rcpp;

// [[Rcpp::export]]
CharacterMatrix reduce_sequences(CharacterMatrix completeDNA)
{
  std::vector<int> informativeSites; 
  for(int i = 0; i < completeDNA.ncol(); i++)
  {
    CharacterVector bpsite(completeDNA.nrow());
    for(int n = 0; n < completeDNA.nrow(); n++)
    {
      bpsite[n] = completeDNA(n,i); 
    }
    if(any(bpsite != bpsite[0]).is_true()) informativeSites.push_back(i);
  }
  CharacterMatrix cutDNA(3, informativeSites.size());
  for(int i = 0; i < informativeSites.size(); i++)
  {
    for(int n = 0; n < cutDNA.nrow(); n++)
    {
      cutDNA(n,i) = completeDNA(n,informativeSites[i]);
    }
  }
  return cutDNA;
}

但是我得到了一个补丁错误,但不是来自我的源文件,而是来自Comparator_With_One_Value.h:

我不会假装完全理解这些错误,因为我仍处于C ++的初期阶段,但通过适当地评论我的代码并找到导致它的原因,这是我的第17行:

if(any(bpsite != bpsite[0]).is_true()) informativeSites.push_back(i);

我认为这与我使用any()有关。我做错了什么?

编辑:更改了行以反映上述解决的所有问题,除了两个: 控制台输出:

Error in Rcpp::sourceCpp("reduceseq.cpp") : 
  Error 1 occurred building shared library.

Comparator_With_One_Value.h返回的问题 operands to ?: have different types 'SEXPREC*' and 'int'invalid conversion from 'SEXPREC* const' to 'int'

谢谢, 本。

1 个答案:

答案 0 :(得分:2)

由于R TRUEFALSENA中的3个逻辑值,我们会故意阻止这种情况。您应该可以像这样使用is_true

if(any(bpsite != bpsite[0]).is_true()) informativeSites.push_back(i);