c++ - sugar all() 行的 Rcpp 错误

标签 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;
}

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

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

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

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

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

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

从 Comparator_With_One_Value.h 返回的问题 操作数 ?: 有不同的类型 'SEXPREC*' 和 'int'从“SEXPREC* const”到“int”的无效转换

谢谢, 本。

最佳答案

我们故意阻止这种情况,因为 R 中的 3 个逻辑值:TRUEFALSENA .您应该能够像这样使用 is_true :

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

关于c++ - sugar all() 行的 Rcpp 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16558690/

相关文章:

c++ - cpp-静态成员和函数

c++ - 使用 C/C++ 处理 sysfs 内容的最佳方法是什么?

C++ 访问类成员的操作顺序

r - 在 session 之间保存包设置

r - 为什么 R 将文件排序为 1 10 100 而不是 1 2 3?

excel - 将Excel中的文本粘贴到Word标题中?

c++ - 检查字符串中数字的总和 C++

http - 添加 X-Request-Guid header 是什么意思

html - 页脚可以有页眉标签吗?

r - 在 r 中循环一个 rep() 函数