1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
#######################################################################
# Get a result based on a probability (default is 0.5)
# a typical usage is: 'if(pr(x)) then ...
# The default case is equivalent to tossing a coin
# You can pass in a vector of probabilties to get a vector of T, F results
#
pr <- function(x = 0.5){
if (!length(x)) {return()}
if (x<0 || x>1) stop(" prob out of range\n")
return(ifelse(rbinom(length(x), 1, x), TRUE, FALSE))
}
#######################################################################
# multinomial randomiser; by S.B. extended by S.P.
# n - length of result vector
# p - vector of probabilities; has to sum to <= 1
# val - vector of return values, with length == p or:
# if longer than p, should be 1 element longer (LAST element is returned)
rMulti <- function(n=1, p, val) {
res <- 1:n
for(i in res) {
element <- ((1:length(p))[runif(1)<cumsum(p)])
r <-val[element[1]]
if (is.na(r)) r <- val[length(val)]
res[i] <- r
names(res)[i] <- names(r)
}
return(res)
}
#######################################################################
# calcPert - for Netica - calc Beta params from pert(min, mode, max)
calcPert <- function(mini, mod, maxi) {
alpha <- (4*mod + maxi - 5*mini) / (maxi - mini)
betar <- (5*maxi - mini - 4*mod) / (maxi - mini)
return(unlist(list(alpha=alpha, beta=betar)))
}
|