rcpp中%%的糖

问题描述 投票:3回答:1

%%的Rcpp糖是多少?

例如,我在R中有以下陈述

y <- c('XA','XB','XC','XF','XK','XL','XM','XN','XO','XP','XS','XU','XW','XY', 'DF','DS','AS','XL','FG')
x <- ifelse(y %in% c("XA","XB","XC","XF","XK","XL","XM","XN","XO","XP","XS","XU","XW","XY"),"KCA","KUS")

我正在尝试使用||在上面的Rcpp中,x和y都被定义为类型

std::vector<std::string> 

代码片段是

int n = y.size();
for (int i = 0; i < n; i++){
 if (y[i] == 'XA' ||
      y[i] == 'XB' ||
      y[i] == 'XC' ||
      y[i] == 'XF' ||
      y[i] == 'XK' ||
      y[i] == 'XL' ||
      y[i] == 'XM' ||
      y[i] == 'XN'||
      y[i] == 'XO'||
      y[i] == 'XP' ||
      y[i] == 'XS' ||
      y[i] == 'XU'  ||
      y[i] == 'XW' ||
      y[i] == 'XY' ) {x[i] = 'KCA';}
  else
  {x[i] ='KUS';}
} //end of loop

但是我收到以下错误:

ambiguous overload for operator'=='(operand types are 'std::basic_string<char>' and 'int')

有糖吗?

%in%

我可以在Rcpp中使用,或者我如何使用||在Rcpp这里避免错误?

r rcpp
1个回答
4
投票

查看Unofficial Rcpp API以获取糖化in算子的示例。特别是,给出的例子是:

CharacterVector A = CharacterVector::create("a", "b", "c", "c", "e", "b", "d");

CharacterVector B = CharacterVector::create("a", "b");

LogicalVector C = in(A, B);

在你的情况下,我们可以构建:

#include <Rcpp.h>

// [[Rcpp::export]]
Rcpp::CharacterVector my_classify(Rcpp::CharacterVector x,
                                  Rcpp::CharacterVector table,
                                  std::string true_cond = "KCA",
                                  std::string false_cond = "KUS") {

  Rcpp::CharacterVector out = Rcpp::CharacterVector(x.size());

  Rcpp::LogicalVector cond = in(x, table);

  for(unsigned int i = 0; i < cond.size(); ++i){
     if(cond[i]) {
       out[i] = true_cond;
     } else {
       out[i] = false_cond;
     }
  }

  return out;
}

测试用例

x = c('XA','XB','XC','XF','XK','XL','XM','XN','XO','XP','XS',
      'XU','XW','XY', 'DF','DS','AS','XL','FG')
table = c("XA","XB","XC","XF","XK","XL","XM","XN",
          "XO","XP","XS","XU","XW","XY")
y = my_classify(x, table)
y
#>  [1] "KCA" "KCA" "KCA" "KCA" "KCA" "KCA" "KCA" "KCA" "KCA" "KCA" "KCA"
#> [12] "KCA" "KCA" "KCA" "KUS" "KUS" "KUS" "KCA" "KUS"
© www.soinside.com 2019 - 2024. All rights reserved.