Rcpp中bool向量的子集向量
Subset vector by bool vector in Rcpp
我想用布尔向量对向量 {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 是布尔值。我的问题有两个:1) 如何使用 Armadillo/Rcpp 创建布尔向量,以及 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 中的 "braced initialization" 快速生成 LogicalVector
。您可以轻松地单独分配值。第二个示例使用逻辑表达式创建 LogicalVector
。在这两种情况下,子设置看起来非常像 R 中的(感谢 Rcpp 糖)。
正如 Dirk 在评论中所说:Rcpp gallery 中还有更多示例。只需搜索 'indexing' 或 'LogicalVector'.
我想用布尔向量对向量 {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 是布尔值。我的问题有两个:1) 如何使用 Armadillo/Rcpp 创建布尔向量,以及 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 中的 "braced initialization" 快速生成 LogicalVector
。您可以轻松地单独分配值。第二个示例使用逻辑表达式创建 LogicalVector
。在这两种情况下,子设置看起来非常像 R 中的(感谢 Rcpp 糖)。
正如 Dirk 在评论中所说:Rcpp gallery 中还有更多示例。只需搜索 'indexing' 或 'LogicalVector'.