Я пытаюсь написать некоторый код, используя Rcpp, и пытаюсь понять, как условные операторы работают между логическими векторами, возникающими из сравнений с использованием NumericVector, и родного типа bool C ++.
Метод, на котором я остановился, следующий (минимальный воспроизводимый пример, мой пример был более сложным):
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector compare(NumericVector a, NumericVector b) {
if (is_true(all(b <= a))) {
return a;
}
return b;
}
Однако is_true и все кажутся избыточными, если (например, как в моем более сложном случаечто я не показываю вам), a и b гарантированно будут иметь длину 1.
Теперь я только что нашел нелепо запутанную технику, или это неудачный случай «это лучшее, что у нас есть»получил (и причины такого подхода лучше, чем причины против, несмотря на такие крайние случаи) '?