我一直在try 使用Rcpp犰狳查找向量x中元素的索引,该向量x的元素也位于另一个向量vals中.xvals均为arma::uvec型.

在R中,这很简单:

x <- c(1,1,1,4,2,4,4)
vals <- c(1,4)
which(v %in% vals)

我扫描了犰狳的文档,find()张显然是我的第一次try ;但它不起作用,因为vals是一个向量.我也try 了intersect(),但它只返回前unique个索引.

使用犰狳做这件事的好/有效方法是什么?我必须使用find()遍历vals中的元素吗?

推荐答案

快速肮脏的方式:

Rcpp::cppFunction("
  arma::uvec ind(arma::uvec x, arma::uvec y){
   arma::vec a(x.size(), arma::fill::zeros);
   for (auto i:y) a = a +  (x==i);
   return arma::find(a) + 1;
  }
 ", 'RcppArmadillo')

c(ind(v, vals))
[1] 1 2 3 4 6 7

R相关问答推荐

R绑定具有不同时间观察的两个数据帧

收件箱摘要表布局在第一列上显示子类别

ggplot geom_smooth()用于线性回归虚拟变量-没有回归线

R等效于LABpascal(n,1)不同的列符号

如何按排序顺序打印一个框架中所有精确的唯一值?

R中的子集文件—读取文件名索引为4位数字序列,例如0001到4000,而不是1到4000)

r替换lme S4对象的字符串的一部分

如何从R中的字符串元素中减go 一个数字?

如何在geom_col中反转条

R根据条件进行累积更改

如何得到每四个元素向量R?

从服务器在Shiny中一起渲染图标和文本

用两种 colored颜色 填充方框图

汇总数据帧中的复制列,保持行的唯一性

如何在R中使用hmm TMB提前一步预测观察到的状态?

WRS2包中带有bwtrim的简单ANOVA抛出错误

如何将一个方阵分解成没有循环的立方体

如何在PrePlot()中将多个元素设置为斜体

ggplot R:X,Y,Z使用固定/等距的X,Y坐标绘制六边形热图

如果满足条件,则替换列的前一个值和后续值