%%的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这里避免错误?
查看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"