r - Rcpp中bool向量的子集向量

标签 r rcpp rcpparmadillo

我想用 bool 向量对向量 {1,2,3,4} 进行子集化。例如,如果我的 bool 向量是 {false,true,true,true},我想得到向量 {2,3,4}。在常规 R 中,我可以用

    sample_states<-c(1:4)[c(a,b,c,d)]

其中 a、b、c、d 是 bool 值。我的问题有两个:1) 如何使用 Armadillo/Rcpp 创建 bool 向量,以及 2) 如何使用该向量对向量 {1,2,3,4} 进行子集化。提前感谢您的宝贵时间。

最佳答案

这里有两个简单的例子,如何创建一个 Rcpp::LogicalVector 并用它子集化另一个向量:

#include <Rcpp.h>
// [[Rcpp::plugins(cpp11)]]

// [[Rcpp::export]]
Rcpp::NumericVector subset1() {
  Rcpp::NumericVector in = {1.0, 2.0, 3.0, 4.0};
  Rcpp::LogicalVector mask = {false, true, true, true};
  return in[mask];
}

// [[Rcpp::export]]
Rcpp::NumericVector subset2() {
  Rcpp::NumericVector in = Rcpp::runif(10);
  Rcpp::LogicalVector mask = in > 0.5;
  return in[mask];
}

/*** R
subset1()
set.seed(42)
subset2()
*/

第一个示例使用 C++11 中的“大括号初始化”来快速生成 LogicalVector。您可以轻松地单独分配值。第二个示例使用逻辑表达式创建 LogicalVector。在这两种情况下,子设置看起来非常像 R 中的(感谢 Rcpp 糖)。

正如 Dirk 在评论中所说:Rcpp gallery 中有更多示例.只需搜索“索引”或“LogicalVector”。

关于r - Rcpp中bool向量的子集向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55667907/

相关文章:

R table() 输出到 csv 文件

R : Draw timeline flowchart

c++ - Rcpp:将 C 数组作为 NumericMatrix 返回给 R

r - 如何删除警告 : Rcpp/DataFrame. h :136:18: warning unused variable 'data' ?

r - 矩阵索引中的负下标

R:ggplot2 - 根据标签手动设置点形状、线型和颜色

c++ - 如何使用QtCreator代替gdb调试基于Rcpp的R包中的C++代码

rcpp - RcppParallel 的堆栈不平衡

Rcpp 仅返回返回行的第一部分

python - R readBin 与 Python 结构