Условное обновление NumericVectors в Rcpp - PullRequest
0 голосов
/ 11 февраля 2019

В R я бы использовал это для обновления значений в векторе, соответствующем условному критерию:

a <- rep(seq(1:20),5)
a[a==5] <- 100 

Как бы я поступил, используя Rcpp, если бы у меня был NumericVector a?

Я новичок в Rcpp, и в данный момент я могу думать только о том, чтобы перебрать каждое значение в a.Я использую это:

cppFunction('NumericVector test(NumericVector a){
            int b = a.size();
            for (int i = 0; i < b; i++) {
            if (a[i] == 5) {
            a[i] = 100;
            }
      }
      return(a);

}')

Есть ли способ сделать это без цикла или с меньшим количеством строк кода?

Любая помощь высоко ценится.

1 Ответ

0 голосов
/ 11 февраля 2019

Для стандартных алгоритмов, подобных этому, вы можете обнаружить, что он уже реализован в стандартной библиотеке:

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
NumericVector replace(NumericVector x) {
  std::replace(x.begin(), x.end(), 5, 100);
  return x;
}


/*** R
a <- rep(seq(1:20),5)
replace(a)
a
*/

Помните, что если вход a уже имеет тип double, он будет изменен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...