# The definition of g3_env$ratio_add_pop looks like:
eg_ratio_add_pop <- g3_native(r = function(orig_vec, orig_amount,
new_vec, new_amount) {
((orig_vec * orig_amount + new_vec * new_amount)
/
avoid_zero_vec(orig_amount + new_amount))
}, cpp = '[](vector orig_vec, vector orig_amount,
vector new_vec, vector new_amount)
-> vector {
return (orig_vec * orig_amount + new_vec * new_amount)
/
avoid_zero_vec(orig_amount + new_amount);
}', depends = c('avoid_zero_vec'))
# eg_ratio_add_pop() can then be used in formulas, both in R & TMB.
# Define a random walk action, using g3_global_formula to keep track of
# previous value. NB: my_randomwalk_prevrec must be unique in a model
random_walk_action <- g3_formula(quote({
if (cur_time > 0) nll <- nll + dnorm(x, stock__prevrec, 1, 1)
my_randomwalk_prevrec <- x
}), x = 'TODO', my_randomwalk_prevrec = g3_global_formula(init_val = 0.0))
Run the code above in your browser using DataLab