## get sensitivity for an Xeva object
#'
#' Get sensitivity for an Xeva object
#' @description
#' Given a Xeva object, it will return a \code{data.frame} detailing sensitivity information.
#'
#' @examples
#' data(brca)
#' head(sensitivity(brca, type="batch"))
#' head(sensitivity(brca, type="model"))
#' @param object The \code{Xeva} dataset.
#' @param type Sensitivity type (either model or batch).
#' @param sensitivity.measure Name of the \code{sensitivity.measure}. Default \code{NULL} will return all sensitivity measures.
#'
#' @return A \code{data.frame} with model or batch ID and sensitivity values.
#' @export
sensitivity <- function(object, type=c("model", "batch"), sensitivity.measure=NULL)
{
type <- match.arg(type)
senNames <- names(slot(object, "sensitivity"))
if(is.element(type, senNames)==FALSE)
{
msg <- sprintf("sensitivity 'type' can be:\n%s", paste(senNames, collapse = "\n"))
stop(msg)
}
sm <- slot(object, "sensitivity")[[type]]
if(!is.null(sensitivity.measure))
{
sm2take <- intersect(sensitivity.measure, colnames(sm))
if(length(sm2take)>0)
{
if(length(sensitivity.measure)!=length(sm2take))
{
notPresent <- setdiff(sensitivity.measure, sm2take)
msg <- sprintf("some sensitivity.measure are not present in sensitivity slot and will be ignored\n%s\n",
paste(notPresent, collapse="\n") )
warning(msg)
}
if(type=="model"){ sm <- sm[,c("model.id", sm2take)] }
if(type=="batch"){ sm <- sm[,c("batch.name", sm2take)]}
} else
{
msg <- sprintf("sensitivity.measure are not present in sensitivity slot\n%s\n",
paste(sensitivity.measure,collapse="\n") )
stop(msg)
}
}
return(sm)
}
## add new sensitivity in a Xeva object
#'
#' add new sensitivity in a Xeva object
#' @description
#' This will add a add new sensitivity in a Xeva object
#'
#' @examples
#' data(brca)
#' s <- sensitivity(brca, "model")
#' brca <- setSensitivity(brca, "model", "mR", s$mRECIST)
#' @param object The \code{Xeva} dataset
#' @param type sensitivity type (either model or batch)
#' @param name name of new sensitivity column
#' @param value a vector of values. If vector is named, values will be filled by name. Missing values will be NA
#'
#' @return a \code{Xeva} object with updated with updated sensitivity
#' @keywords internal
#' @noRd
setGeneric(name= "setSensitivity", def = function(object, type, name, value)
{standardGeneric("setSensitivity")} )
#' @keywords internal
#' @noRd
####@export
setMethod( f="setSensitivity",
signature= signature(object="XevaSet"),
definition=function(object, type, name, value)
{
if(is.element(type, names(slot(object, "sensitivity")))==TRUE )
{
if(is.null(names(value)))
{
if(length(value)!= nrow(slot(object, "sensitivity")[[type]]))
{
msg <- sprintf("vector 'value' must be of same length as other sensitivity")
stop(msg)
}
slot(object, "sensitivity")[[type]][, name] <- NA
slot(object, "sensitivity")[[type]][, name] <- value
} else
{
slot(object, "sensitivity")[[type]][, name] <- NA
slot(object, "sensitivity")[[type]][, name] <-
value[rownames(slot(object, "sensitivity")[[type]])]
}
} else
{
msg <- sprintf("sensitivity 'type' can be:\n%s",
paste(names(slot(object, "sensitivity")), collapse = "\n"))
stop(msg)
}
return(object)
} )
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.