| Title: | Generate Random Vectors Whose Components Sum Up to One | 
| Description: | A single method implementing multiple approaches to generate pseudo-random vectors whose components sum up to one (see, e.g., Maziero (2015) <doi:10.1007/s13538-015-0337-8>). The components of such vectors can for example be used for weighting objectives when reducing multi-objective optimisation problems to a single-objective problem in the socalled weighted sum scalarisation approach. | 
| Version: | 1.0.0 | 
| Depends: | R (≥ 3.1.0) | 
| Imports: | Rcpp, checkmate | 
| Suggests: | covr, testthat, scatterplot3d | 
| License: | BSD_2_clause + file LICENSE | 
| URL: | https://jakobbossek.github.io/rrandvec/, https://github.com/jakobbossek/rrandvec | 
| BugReports: | https://github.com/jakobbossek/rrandvec/issues | 
| Encoding: | UTF-8 | 
| ByteCompile: | true | 
| RoxygenNote: | 7.2.3 | 
| LinkingTo: | Rcpp | 
| NeedsCompilation: | yes | 
| Packaged: | 2023-03-29 15:42:20 UTC; bossek | 
| Author: | Jakob Bossek | 
| Maintainer: | Jakob Bossek <j.bossek@gmail.com> | 
| Repository: | CRAN | 
| Date/Publication: | 2023-03-30 07:10:02 UTC | 
Generate random vectors that sum up to one.
Description
Generate an n \times d matrix. Each row vector is a
probability vector (p_1, \ldots, p_d) with \sum_{i=1}^{d} p_i = 1.
The function offers several methods to generate the rows in a way that the
components are unbiased which means that they are required to have similar /
the same probability distributions.
[1] Maziero, J. Generating Pseudo-Random Discrete Probability Distributions. Brazilian Journal of Physics 45, 377–382 (2015). https://doi.org/10.1007/s13538-015-0337-8
[2] Grimme, C. Picking a Uniformly Random Point from an Arbitrary Simplex. Technical Report. https://doi.org/10.13140/RG.2.1.3807.6968
Usage
rrandvec(n, d, method = "normalization", shuffle = FALSE, as.df = FALSE)
Arguments
| n | [ | 
| d | [ | 
| method | [ | 
| shuffle | [ | 
| as.df | [ | 
Value
[matrix(n, d)] (n \times d) matrix even if n=1.
Examples
R = rrandvec(1000, 2)
R = rrandvec(1000, 5, method ="iterative")
R = rrandvec(1000, 3, method = "trigonometric", shuffle = TRUE, as.df = TRUE)
if (require("scatterplot3d")) {
  scatterplot3d::scatterplot3d(R, angle = 120, cex.symbols = 0.5, pch = 3, color = "blue")
}