0

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() を使用していることが関係していると思います。私が間違っているのは何ですか?

編集: 2 つを除いて解決された上記のすべての問題を反映するように行を変更しました: コンソール出力:

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'

ありがとう、ベン。

4

1 に答える 1

2

、、の 3 つの値が論理的であるため、意図的にこれを防ぎRます。次のように使用できるはずです:TRUEFALSENAis_true

if(any(bpsite != bpsite[0]).is_true()) informativeSites.push_back(i);
于 2013-05-15T08:24:51.473 に答える