Skip to content

Commit

Permalink
minor improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
qddyy committed Dec 17, 2024
1 parent 532bc89 commit fb17af3
Show file tree
Hide file tree
Showing 11 changed files with 62 additions and 48 deletions.
2 changes: 1 addition & 1 deletion DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Package: LearnNonparam
Title: 'R6'-Based Flexible Framework for Permutation Tests
Version: 1.2.5
Version: 1.2.6
Authors@R:
person(given = "Yan", family = "Du", role = c("aut", "cre"), email = "[email protected]", comment = c(ORCID = "0009-0009-1169-921X"))
Description: Implements non-parametric tests from Higgins (2004, ISBN:0534387756), including tests for one sample, two samples, k samples, paired comparisons, blocked designs, trends and association. Built with 'Rcpp' for efficiency and 'R6' for flexible, object-oriented design, the package provides a unified framework for performing or creating custom permutation tests.
Expand Down
54 changes: 34 additions & 20 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,17 @@
# LearnNonparam 1.2.6

- R side
- Added more documentation
- Switched to version 3 serialization format
- Fixed the issue with parameter passing to `ggplot2::stat_bin` in `plot()`
- Added detection for missing values and zero-length data in `test()`

- C++ side
- Improved the efficiency of calling R from C++
- Enhanced the permuting efficiency in `rcbd.*`, `association.*`, and `table.*`
- Replaced `R_len_t` with `R_xlen_t` to support long vectors
- Replaced `Rcpp.h` with `Rcpp/Lightest` to reduce compilation time

# LearnNonparam 1.2.5

- Added support for `scoring` as an active binding in `define_pmt`
Expand All @@ -7,39 +21,39 @@
# LearnNonparam 1.2.4

- R side
- Added support for custom scoring systems in `define_pmt`
- Enabled compatibility with C++ standard versions beyond C++14 in `define_pmt`
- Improved the performance of `KruskalWallis`, `OneWay`, and `Studentized`
- Replaced certain `warning()` calls with `stop()`
- Refined some text
- Added support for custom scoring systems in `define_pmt`
- Enabled compatibility with C++ standard versions beyond C++14 in `define_pmt`
- Improved the performance of `KruskalWallis`, `OneWay`, and `Studentized`
- Replaced certain `warning()` calls with `stop()`
- Refined some text

- C++ side
- Enhanced permuting efficiency in `twosample_pmt`
- Enhanced the permuting efficiency in `twosample.*`

# LearnNonparam 1.2.3

- Improved `twosample_pmt`
- Improved `twosample.*`
- Added examples
- Fixed `SiegelTukey` and `ContingencyTableTest`

# LearnNonparam 1.2.2

- R side
- Changed the default value of `n_permu` to `1e4`
- Added support for test statistics defined using Rcpp in `define_pmt`
- Added support for `null_value` other than zero in two-sample location tests
- Added support for `scoring` in `TwoSampleAssociationTest`
- Added a confidence interval for p-value in `print()`
- Added the `LearnNonparam.pmt_progress` option
- Added `attr(t$n_permu, "n_used")`
- Replaced `multicomp.*` with `multcomp.*`
- Replaced `KSampleF` and `RCBDF` with `OneWay` and `RCBDOneWay`
- Stopped exporting abstract classes (`TwoSampleTest`, `KSampleTest`, etc.)
- Improved the efficiency of `ChiSquare`, `Difference`, `JonckheereTerpstra`, `KruskalWallis`, `RatioMeanDeviance` and `Studentized`
- Fixed many bugs
- Changed the default value of `n_permu` to `1e4`
- Added support for test statistics defined using Rcpp in `define_pmt`
- Added support for `null_value` other than zero in two-sample location tests
- Added support for `scoring` in `TwoSampleAssociationTest`
- Added a confidence interval for p-value in `print()`
- Added the `LearnNonparam.pmt_progress` option
- Added `attr(t$n_permu, "n_used")`
- Replaced `multicomp.*` with `multcomp.*`
- Replaced `KSampleF` and `RCBDF` with `OneWay` and `RCBDOneWay`
- Stopped exporting abstract classes (`TwoSampleTest`, `KSampleTest`, etc.)
- Improved the efficiency of `ChiSquare`, `Difference`, `JonckheereTerpstra`, `KruskalWallis`, `RatioMeanDeviance` and `Studentized`
- Fixed many bugs

- C++ side
- Introduced a new progress bar, which is built at compile time to minimize runtime overhead
- Introduced a new progress bar, which is built at compile time to minimize runtime overhead

# LearnNonparam 1.2.1

Expand Down
2 changes: 1 addition & 1 deletion R/AnsariBradley.R
Original file line number Diff line number Diff line change
Expand Up @@ -89,4 +89,4 @@ AnsariBradley <- R6Class(
private$.p_value <- get_p_continous(z, "norm", private$.side)
}
)
)
)
2 changes: 1 addition & 1 deletion R/Friedman.R
Original file line number Diff line number Diff line change
Expand Up @@ -65,4 +65,4 @@ Friedman <- R6Class(
)
}
)
)
)
2 changes: 1 addition & 1 deletion R/KolmogorovSmirnov.R
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,4 @@ KolmogorovSmirnov <- R6Class(
private$.side <- "r"
}
)
)
)
2 changes: 1 addition & 1 deletion R/Page.R
Original file line number Diff line number Diff line change
Expand Up @@ -64,4 +64,4 @@ Page <- R6Class(
private$.p_value <- get_p_continous(z, "norm", private$.side)
}
)
)
)
3 changes: 1 addition & 2 deletions R/RCBDOneWay.R
Original file line number Diff line number Diff line change
Expand Up @@ -69,5 +69,4 @@ RCBDOneWay <- R6Class(
)
}
)
)

)
2 changes: 1 addition & 1 deletion R/do_call.R
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,4 @@ do_call <- function(func, default = list(), fixed = list(), ...) {
# All arguments will be evaluated within the `args` environment.
# https://stackoverflow.com/a/25371509/23137996
eval(as.call(c(func, lapply(`names<-`(...args, ...args), as.name))), args)
}
}
10 changes: 5 additions & 5 deletions R/pmt.R
Original file line number Diff line number Diff line change
Expand Up @@ -164,8 +164,8 @@ pmts <- function(
#' rcpp <- define_pmt(
#' inherit = "twosample", n_permu = 1e5,
#' statistic = "[](const auto& x, const auto& y) {
#' auto m = x.size();
#' auto n = y.size();
#' auto m = x.length();
#' auto n = y.length();
#' return [=](const auto& x, const auto& y) {
#' return sum(x) / m - sum(y) / n;
#' };
Expand All @@ -176,9 +176,9 @@ pmts <- function(
#' # rcpp <- define_pmt(
#' # inherit = "twosample", n_permu = 1e5,
#' # statistic = "[](const NumericVector& x, const NumericVector& y) {
#' # R_xlen_t m = x.size();
#' # R_xlen_t n = y.size();
#' # return [=](const NumericVector& x, const NumericVector& y) -> double {
#' # R_xlen_t m = x.length();
#' # R_xlen_t n = y.length();
#' # return [m, n](const NumericVector& x, const NumericVector& y) -> double {
#' # return sum(x) / m - sum(y) / n;
#' # };
#' # }"
Expand Down
21 changes: 11 additions & 10 deletions inst/include/pmt/permutation.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
#include <algorithm>
#include <iterator>

template <typename T>
using diff_t = typename std::iterator_traits<T>::difference_type;

template <typename T>
T rand_int(T n)
{
Expand All @@ -12,12 +15,10 @@ T rand_int(T n)
template <typename T>
void random_shuffle(T first, T last)
{
using diff_t = typename std::iterator_traits<T>::difference_type;

diff_t n = std::distance(first, last);
diff_t<T> n = std::distance(first, last);

for (diff_t i = 0; i < n - 1; i++) {
diff_t j = i + rand_int(n - i);
for (diff_t<T> i = 0; i < n - 1; i++) {
diff_t<T> j = i + rand_int(n - i);
std::iter_swap(first + i, first + j);
}
}
Expand All @@ -33,10 +34,10 @@ double n_permutation(T first, T last)
{
double A = 1.0;

typename std::iterator_traits<T>::difference_type rep = 0;
diff_t<T> rep = 0;

auto val = *first;
for (auto it = first; it != last; it++) {
for (T it = first; it != last; it++) {
A *= std::distance(first, it) + 1;
if (*it == val) {
A /= ++rep;
Expand All @@ -50,19 +51,19 @@ double n_permutation(T first, T last)
}

template <typename T>
auto random_shuffle(T& v)
auto random_shuffle(T&& v)
{
return random_shuffle(v.begin(), v.end());
}

template <typename T>
auto next_permutation(T& v)
auto next_permutation(T&& v)
{
return next_permutation(v.begin(), v.end());
}

template <typename T>
auto n_permutation(const T& v)
auto n_permutation(T&& v)
{
return n_permutation(v.begin(), v.end());
}
10 changes: 5 additions & 5 deletions man/pmt.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit fb17af3

Please sign in to comment.