Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我不知道';我不理解Rcpp中的这种行为_C++_R_Rcpp - Fatal编程技术网

C++ 我不知道';我不理解Rcpp中的这种行为

C++ 我不知道';我不理解Rcpp中的这种行为,c++,r,rcpp,C++,R,Rcpp,我想使用Rcpp访问整数向量中第二个唯一元素的值,但我得到的是一个长度等于整数向量中第二个项的值的零向量。我做错了什么 require(Rcpp) cppFunction("NumericVector test(IntegerVector labelling1) { IntegerVector lvls = unique(labelling1); return(lvls[1]); }") test(1:5) #[1] 0 0 Subsetting sugar需要一个Intege

我想使用Rcpp访问整数向量中第二个唯一元素的值,但我得到的是一个长度等于整数向量中第二个项的值的零向量。我做错了什么

require(Rcpp)
cppFunction("NumericVector test(IntegerVector labelling1) {
  IntegerVector lvls = unique(labelling1);
  return(lvls[1]);
}")

  test(1:5)
 #[1] 0 0

Subsetting sugar需要一个
IntegerVector
作为索引()。如果您想模仿R的
独特功能
,则需要进行一些额外的更改:

cppFunction("IntegerVector  test(IntegerVector labelling1, int i) {
              // get sorted unique values
              IntegerVector lvls = sort_unique(labelling1);
              // get unique values in order of occurence 
              IntegerVector lvls1 = lvls[match(lvls, labelling1) - 1];
              return(lvls1[IntegerVector::create(i - 1)]);}")

test(c(5:1, 1L), 2)
#[1] 4

Subsetting sugar需要一个
IntegerVector
作为索引()。如果您想模仿R的
独特功能
,则需要进行一些额外的更改:

cppFunction("IntegerVector  test(IntegerVector labelling1, int i) {
              // get sorted unique values
              IntegerVector lvls = sort_unique(labelling1);
              // get unique values in order of occurence 
              IntegerVector lvls1 = lvls[match(lvls, labelling1) - 1];
              return(lvls1[IntegerVector::create(i - 1)]);}")

test(c(5:1, 1L), 2)
#[1] 4

Subsetting sugar需要一个
IntegerVector
作为索引()。如果您想模仿R的
独特功能
,则需要进行一些额外的更改:

cppFunction("IntegerVector  test(IntegerVector labelling1, int i) {
              // get sorted unique values
              IntegerVector lvls = sort_unique(labelling1);
              // get unique values in order of occurence 
              IntegerVector lvls1 = lvls[match(lvls, labelling1) - 1];
              return(lvls1[IntegerVector::create(i - 1)]);}")

test(c(5:1, 1L), 2)
#[1] 4

Subsetting sugar需要一个
IntegerVector
作为索引()。如果您想模仿R的
独特功能
,则需要进行一些额外的更改:

cppFunction("IntegerVector  test(IntegerVector labelling1, int i) {
              // get sorted unique values
              IntegerVector lvls = sort_unique(labelling1);
              // get unique values in order of occurence 
              IntegerVector lvls1 = lvls[match(lvls, labelling1) - 1];
              return(lvls1[IntegerVector::create(i - 1)]);}")

test(c(5:1, 1L), 2)
#[1] 4

这里实际上有一个单独的问题:您正试图从
int
构造
NumericVector
,Rcpp执行以下操作:

  • 函数将返回整数值
    2
  • 数值向量
    构造为
    数值向量(2)
    ;即长度为2的
    NumericVector
  • 如果您真正想要的是一个表示该索引处的值的
    IntegerVector
    ,则必须编写:

    IntegerVector test(IntegerVector labelling1) {
      IntegerVector lvls = unique(labelling1);
      return IntegerVector::create(lvls[1]);
    }
    
    或者您也可以使用Rcpp属性(为您自动处理从
    int
    IntegerVector
    的转换):

    #包括
    使用名称空间Rcpp;
    //[[Rcpp::导出]]
    int测试(IntegerVector标签1){
    整合器lvls=唯一(标签1);
    返回等级[1];
    }
    /***R
    测试(1:5)
    */
    
    这里实际上有一个单独的问题:您试图从
    int
    构造一个
    数值向量
    ,Rcpp执行以下操作:

  • 函数将返回整数值
    2
  • 数值向量
    构造为
    数值向量(2)
    ;即长度为2的
    NumericVector
  • 如果您真正想要的是一个表示该索引处的值的
    IntegerVector
    ,则必须编写:

    IntegerVector test(IntegerVector labelling1) {
      IntegerVector lvls = unique(labelling1);
      return IntegerVector::create(lvls[1]);
    }
    
    或者您也可以使用Rcpp属性(为您自动处理从
    int
    IntegerVector
    的转换):

    #包括
    使用名称空间Rcpp;
    //[[Rcpp::导出]]
    int测试(IntegerVector标签1){
    整合器lvls=唯一(标签1);
    返回等级[1];
    }
    /***R
    测试(1:5)
    */
    
    这里实际上有一个单独的问题:您试图从
    int
    构造一个
    数值向量
    ,Rcpp执行以下操作:

  • 函数将返回整数值
    2
  • 数值向量
    构造为
    数值向量(2)
    ;即长度为2的
    NumericVector
  • 如果您真正想要的是一个表示该索引处的值的
    IntegerVector
    ,则必须编写:

    IntegerVector test(IntegerVector labelling1) {
      IntegerVector lvls = unique(labelling1);
      return IntegerVector::create(lvls[1]);
    }
    
    或者您也可以使用Rcpp属性(为您自动处理从
    int
    IntegerVector
    的转换):

    #包括
    使用名称空间Rcpp;
    //[[Rcpp::导出]]
    int测试(IntegerVector标签1){
    整合器lvls=唯一(标签1);
    返回等级[1];
    }
    /***R
    测试(1:5)
    */
    
    这里实际上有一个单独的问题:您试图从
    int
    构造一个
    数值向量
    ,Rcpp执行以下操作:

  • 函数将返回整数值
    2
  • 数值向量
    构造为
    数值向量(2)
    ;即长度为2的
    NumericVector
  • 如果您真正想要的是一个表示该索引处的值的
    IntegerVector
    ,则必须编写:

    IntegerVector test(IntegerVector labelling1) {
      IntegerVector lvls = unique(labelling1);
      return IntegerVector::create(lvls[1]);
    }
    
    或者您也可以使用Rcpp属性(为您自动处理从
    int
    IntegerVector
    的转换):

    #包括
    使用名称空间Rcpp;
    //[[Rcpp::导出]]
    int测试(IntegerVector标签1){
    整合器lvls=唯一(标签1);
    返回等级[1];
    }
    /***R
    测试(1:5)
    */
    
    我想我是要求它返回一个数值向量而不是int,所以当它强制int为数值向量时,这是结果。我想我是要求它返回一个数值向量而不是int,所以当它强制int为数值向量时,这是结果。我想我是要求它返回一个数值向量而不是int,所以当它强制int为一个数值向量这是结果。我想我是要求它返回一个数值向量而不是int,所以当它强制int为数值向量时,这就是结果。显然,找到第二个唯一元素的可能性更大。谢谢。(我同意有更有效的方法找到第二个唯一元素,但这是一个复制我问题的最小示例)。显然,有更有效的方法找到第二个唯一元素。谢谢。(我同意有更有效的方法找到第二个唯一元素,但这是一个复制我问题的最小示例)。显然,有更有效的方法找到第二个唯一元素。谢谢。(我同意有更有效的方法找到第二个唯一元素,但这是一个复制我问题的最小示例)。显然,有更有效的方法找到第二个唯一元素。谢谢。(我同意有更有效的方法找到第二个唯一元素,但这是一个复制我问题的最小示例)我对C++和Rcpp很陌生,但在我看来几乎没有人希望从<代码> int >代码>转换为<代码>数字向量< /代码>当用户尝试这样做时,会产生错误或警告是否明智或实用?我对C++和Rcpp很陌生,但在我看来几乎没有人愿意。