2

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

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

其中 a,b,c,d 是布尔值。我的问题是双重的:1)如何使用 Armadillo/Rcpp 创建一个布尔向量,以及 2)如何使用该向量来子集我的向量 {1,2,3,4}。提前感谢您的宝贵时间。

4

1 回答 1

6

这里有两个快速示例,如何使用它创建一个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 库中有更多示例。只需搜索“索引”或“逻辑向量”。

于 2019-04-13T20:04:40.107 回答