Подмножество вектора с помощью вектора bool в Rcpp - PullRequest
0 голосов
/ 13 апреля 2019

Я бы хотел задать для вектора {1,2,3,4} вектор bool.Например, если мой вектор bool был {false, true, true, true}, я хотел бы получить вектор {2,3,4}.В обычном R я мог бы сделать это с

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

, где a, b, c, d - bools.У меня двоякий вопрос: 1) Как я могу создать вектор bools, используя Armadillo / Rcpp, и 2) Как я могу использовать этот вектор для подмножества моего вектора {1,2,3,4}.Заранее спасибо за ваше время.

1 Ответ

3 голосов
/ 13 апреля 2019

Вот два быстрых примера того, как создать 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 sugar).

Как сказал Дирк в комментариях: в галерее Rcpp есть еще примеры.Просто найдите «indexing» или «LogicalVector».

...