cbind
on the vector arguments to make a
matrix, and calls the old one.
unroll.function(mat.fn, ...)
mat.fn
are matrices. Their values define a vector of strings to be appended to the
names of the arguments in the new function. For example fn <- unroll.function(oldfn, gamma=1:3, alpha=0:1)
will make a new function fn
with arguments
gamma1
,gamma2
,gamma3
,alpha0
,alpha1
.
Calling
fn(gamma1=a,gamma2=b,gamma3=c,alpha0=d,alpha1=e)
should give the same answer as
oldfn(gamma=cbind(a,b,c),alpha=cbind(d,e))
flexsurvspline
to allow spline models,
which have an arbitrary number of parameters, to be fitted using
flexsurvreg
. The ``custom distributions'' facility of flexsurvreg
expects the user-supplied probability density and distribution functions
to have one explicitly named argument for each scalar parameter, and
given R vectorisation, each of those arguments could be supplied as a
vector of alternative parameter values. However, spline models have a varying number of scalar parameters,
determined by the number of knots in the spline.
dsurvspline
and psurvspline
have an argument
called gamma
. This can be supplied as a matrix, with
number of columns n
determined by the number of knots (plus 2), and rows
referring to alternative parameter values. The following statements are used in
the source of flexsurvspline
:
dfn <- unroll.function(dsurvspline, gamma=0:(nk-1)) pfn <- unroll.function(psurvspline, gamma=0:(nk-1))to convert these into functions with arguments
gamma0
,
gamma1
,...,gamman
, corresponding to
the columns of gamma
, where n = nk-1
, and with other arguments in the same
format. flexsurvspline
,flexsurvreg
fn <- unroll.function(ncol, x=1:3)
fn(1:3, 1:3, 1:3) # equivalent to...
ncol(cbind(1:3,1:3,1:3))
Run the code above in your browser using DataLab