当我尝试使用Rcpp访问C ++矩阵中的元素时,R崩溃

时间:2015-08-10 15:01:55

标签: r rcpp

我遇到了一个奇怪的问题:当我尝试使用括号(A(1,2))访问元素时,R会话崩溃。当我使用A [1,2]时,它返回第一列而不是第二列,当我尝试A [1,3],A [1,4],...时得到结果...

这是我的代码:

#include <Rcpp.h>
#include <String.h> 

using namespace Rcpp;


// [[Rcpp::export]]
Rcpp::NumericMatrix Function_bag_ngrams(Rcpp::NumericMatrix idv_x_sacs, Rcpp::StringMatrix idv, Rcpp::StringMatrix liste_ngrammes_gardes, Rcpp::StringVector colNamesIdBags )
{

  int nbr_idv = idv_x_sacs.nrow();
  int nbr_sac = idv_x_sacs.ncol();

  int nbr_composants_sacs = liste_ngrammes_gardes.nrow();

  std::string str_aux = "";
  std::string idSac = "";
  int indexIdSac = 0;

  for(int i=0; i<nbr_idv; i++)
  {
    str_aux = (String) idv(i,1);

    for(int j=0; j<nbr_composants_sacs; j++)
    {
      if(str_aux.find(liste_ngrammes_gardes(j,2)) != std::string::npos)
      {
        idSac = (String) liste_ngrammes_gardes(j,1);
        indexIdSac = 0;

        for(int k=0;k<nbr_sac;k++)
        {
          if((String) colNamesIdBags(k)==idSac)
          {
            indexIdSac = k;
            break;
          }
        }

        idv_x_sacs(i,indexIdSac) = 1;
      }
    }

  }


  return idv_x_sacs;
}

我知道问题来自括号,因为我尝试了一个简单的代码,试图访问一个元素并且它崩溃了。

这是我尝试的一个简单代码:

#include <Rcpp.h>
#include <String.h> 

using namespace Rcpp;


// [[Rcpp::export]]

std::string Function(Rcpp::StringMatrix M)
{

    std:string tmp = M(1,1)

  return tmp;
}

以下是我在R中使用它的方式:

sourceCpp("Function.cpp")
Function(matrix(rep("test",4),nrow=2,ncol=2))

感谢的。

1 个答案:

答案 0 :(得分:1)

您正在使用

创建数字矩阵
matrix(rep(0,4),nrow=2,ncol=2)

您要发送到期望StringMatrix的函数

Function(Rcpp::StringMatrix M)

这不可行。