Rcpp

时间:2019-04-13 17:05:23

标签: r rcpp rcpparmadillo

我想用布尔向量将向量{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}进行子集化。预先感谢您的宝贵时间。

1 个答案:

答案 0 :(得分:2)

这里有两个简单的示例,说明如何创建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”即可。