Nothing
#' Creates a dataframe of all combinations of parameter specifications
#'
#' Creates a dataframe of all combinations of parameter specifications for each
#' parameter in a particular type of MARK \code{model}. It is used together
#' with \code{\link{mark.wrapper}} to run a series of models from sets of
#' parameter specifications.
#'
#' This function scans the frame of the calling enviroment and collects all
#' list objects that contain a formula and have names that match
#' \code{parameter.} where parameter is the name of a type of parameter in the
#' \code{model} type. For example, it looks for \code{Phi.} and \code{p.} for
#' \code{model="CJS"}. Any number of characters can follow the period. Each of
#' the named objects should specify a list that matches the structure of a
#' parameter specification as described in \code{\link{make.mark.model}}. It
#' only collects list objects that contain an element named \code{formula},
#' thus it will not collect one like \code{Phi.fixed=list(fixed=1)}. If you
#' want to do something like that, specify it as
#' \code{Phi.fixed=list(formula=~1,fixed=1)}. It is safest to use this inside a
#' function that defines all of the parameter specifications as shown in the
#' example below. The primary use for this function is to create a dataframe
#' which is passed to \code{\link{mark.wrapper}} to construct and run each of
#' the models. It was written as a separate function to provide flexibility to
#' add/delete/modify the list prior to passing to \code{\link{mark.wrapper}}.
#' For example, only certain combinations may make sense for some parameter
#' specifications. Thus you could define a set to create all the combinations
#' and then delete the ones from the dataframe that do not make sense. you
#' want, add others and re-run the function and merge the resulting dataframes.
#' If there are no specifications found for a particular model parameter, it is
#' not included in the list and when it is passed to
#' \code{\link{make.mark.model}}, the default specification will be used for
#' that parameter.
#'
#' @param model character string identifying the type of model (e.g., "CJS")
#' @return dataframe of all combinations of parameter specifications for a
#' model. Each field (column) is the name of a type of parameter (e.g., p and
#' Phi for CJS). The values are character strings identifying particular
#' parameter specifications.
#' @author Jeff Laake
#' @export
#' @seealso \code{\link{mark.wrapper}}
#' @keywords utility
#' @examples
#' \donttest{
#' # This example is excluded from testing to reduce package check time
#' #
#' # Compare this to the run.dipper shown under ?dipper
#' # It is only necessary to create each parameter specification and
#' # create.model.list and mark.wrapper will create and run models for
#' # each combination. Notice that the naming of the parameter
#' # specifications has been changed to accommodate format for
#' # create.model.list. Only a subset of the parameter specifications
#' # are used here in comparison to other run.dipper
#' #
#' data(dipper)
#' run.dipper=function()
#' {
#' #
#' # Process data
#' #
#' dipper.processed=process.data(dipper,groups=("sex"))
#' #
#' # Create default design data
#' #
#' dipper.ddl=make.design.data(dipper.processed)
#' #
#' # Add Flood covariates for Phi and p that have different values
#' #
#' dipper.ddl$Phi$Flood=0
#' dipper.ddl$Phi$Flood[dipper.ddl$Phi$time==2 |
#' dipper.ddl$Phi$time==3]=1
#' dipper.ddl$p$Flood=0
#' dipper.ddl$p$Flood[dipper.ddl$p$time==3]=1
#' #
#' # Define range of models for Phi
#' #
#' Phi.dot=list(formula=~1)
#' Phi.time=list(formula=~time)
#' Phi.sex=list(formula=~sex)
#' Phi.Flood=list(formula=~Flood)
#' #
#' # Define range of models for p
#' #
#' p.dot=list(formula=~1)
#' p.time=list(formula=~time)
#' p.Flood=list(formula=~Flood)
#' #
#' # Run all pairings of models
#' #
#' dipper.model.list=create.model.list("CJS")
#' dipper.results=mark.wrapper(dipper.model.list,
#' data=dipper.processed,ddl=dipper.ddl,delete=TRUE)
#' #
#' # Return model table and list of models
#' #
#' return(dipper.results)
#' }
#' dipper.results=run.dipper()
#' }
create.model.list<-function(model)
{
parameters=setup.parameters(model,check=TRUE)
model.list=list()
for(n in parameters)
{
vec=ls(pattern=paste("^",n,"\\.",sep=""),envir=parent.frame())
if(length(vec)>0)
{
for (i in 1:length(vec))
{
if(eval(parse(text=paste("is.list(",vec[i],")",sep="")),envir=parent.frame()))
{
if(eval(parse(text=paste("!is.null(",vec[i],"$formula)",sep="")),envir=parent.frame()) |
(eval(parse(text=paste("is.list(",vec[i],"[[1]])",sep="")),envir=parent.frame())&&
eval(parse(text=paste("!is.null(",vec[i],"[[1]]$formula)",sep="")),envir=parent.frame())))
model.list[[n]]=c(model.list[[n]],vec[i])
}
}
} else
message("Using default formula for ",n,"\n")
}
if(length(model.list)==0)
stop("\nNo model specifications found. Use case sensitive parameter.description notation (e.g., Phi.time)\n")
if(length(model.list)>1)
{
model.list=expand.grid(model.list)
for (j in 1:dim(model.list)[2])
model.list[,j]=as.character(model.list[,j])
}
else
model.list=as.data.frame(model.list)
return(model.list)
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.