#' Calculate relative control percentile statistic for a list of data.
#'
#' Case and control should be lists of the same length. Each element of the list
#' should contain a data frame for which to compute rcp for/against. Corresponding
#' elements of the case and control lists should be data frames of equal number
#' of rows.
#'
#' @param case Case samples for which to compute RCP.
#' @param ctrl Control samples to compute RCP against.
#' @param min_hits Numeric, hreshold for number of cases scoring above hit_thresh in
#' original score required to be retained after filtering. By default, min_hits
#' is set to 0 and thus RCP is calculated for all peptides. Setting a nonzero
#' value for min_hits is only recommended if calculating RCP for all peptides
#' is prohibitively slow.
#' @param hit_thresh Vector of numeric, threshold value to apply when considering min_hits.
#' hit_thresh is only evaluated if min_hits > 0.
#'
#' @export
compute_rcp_list <- function(case, ctrl, min_hits = 0, hit_thresh = 0){
# Check for input errors.
if(class(ctrl)[1] == "character"){
if(ctrl[1] != "self"){
stop("Error: compute_rcp_list: unrecognized character input for ctrl.")
}
} else if(length(case) != length(ctrl)){
stop("Error: compute_rcp_list: case and control length mismatch.")
} else if((names(case) == names(ctrl)) %>% mean < 1){
stop("Error: compute_rcp_list: mismatch in case and control element names.")
}
# Continue
output_data <- list()
if(length(hit_thresh) == 1) hit_thresh <- rep(hit_thresh, length(case))
for(i in 1:length(case)){
if(class(ctrl)[1] == "character"){
if(ctrl[1] == "self"){
output_data[[i]] <- RCPGenerator(case[[i]], "self", min_hits, hit_thresh[i])
} else{
stop("Error: invalid ctrl input to compute_rcp_list")
}
} else{
output_data[[i]] <- RCPGenerator(case[[i]], ctrl[[i]], min_hits, hit_thresh[i])
}
names(output_data)[i] <- names(case)[i]
}
return(output_data)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.