Добавить функцию для сравнения идентичности возвращаемого результата
Функция для проверки того, что все выражения возвращают одинаковый результат.
Дискуссионный вопрос, т.к. можно сравнивать, например, поведение алгоритма на разных объёмах выборки и масса других случаев. Тем не менее, такую возможность можно добавить с возможностью отключения через опции.
Возможно стоит применять менее строгую проверку, как это делается в all.equal
, но, думаю, этот вариант более сложен в реализации.
Возможные реализации (по мотивам моего ответа на SO):
-
R вариант с использованием
unique
(просто и быстро):identical2 <- function(...) { length(unique(list(...))) == 1L }
-
C++ вариант цикла, который использует
R_compute_identical
для сравнения каждого элемента с первым:#include <Rcpp.h> using namespace Rcpp; inline bool same(RObject a, RObject b) { return R_compute_identical(a, b, 0); } // [[Rcpp::export]] bool identical_impl(const List& x) { std::size_t n = x.size(); for (std::size_t i = 1; i < n; ++i) if (!same(x[0], x[i])) return false; return true; }
identical2 <- function(...) { identical_impl(list(...)) }