R/checkSampleID.r

Defines functions checkSampleID

####################################################################
## Author: Gro Nilsen, Knut Liestøl and Ole Christian Lingjærde.
## Maintainer: Gro Nilsen <gronilse@ifi.uio.no>
## License: Artistic 2.0
## Part of the copynumber package
## Reference: Nilsen and Liestøl et al. (2012), BMC Genomics
####################################################################


# Function to check that samples are found in both data and segments
# If sample=NULL; all unique sampleIDs found in both data and segments are selected

# Input:
### data: the copy number data frame
### segments: a list containing one or more segmentations
### sample: a vector of sample numbers, or NULL


## Output:
### sampleID: a vector of unique selected sampleIDs to be plotted

## Function called by:
### checkAndRetrievePlotInput

## Function calls: none

checkSampleID <- function(data, segments, sample) {
  sampleID <- NULL

  if (!is.null(data)) {
    sample.names <- colnames(data)[-c(1:2)]
    # Pick out ID for samples to be plotted
    if (!is.null(sample)) {
      sampleID <- sample.names[sample]
      if (length(sampleID) == 0) {
        stop("Input in 'sample' is larger than the number of samples found in 'data'", .call = FALSE)
      }
    } else {
      sampleID <- sample.names
    }
  }

  if (!is.null(segments)) {
    all.segid <- sapply(segments, "[", i = 1) # returns a list with all sampleID for each segmentation
    all.segid <- lapply(all.segid, as.character) # convert from factor to charachter
    all.segid <- lapply(all.segid, unique) # get unique sampleids in each segmentation

    # Find common sampleIDs in data and all segmentations, given input in sample
    i <- 1
    if (is.null(sampleID)) { # data is NULL
      # Get sampleIDs to be plotted for the first segmentation result
      sampleID <- all.segid[[1]]
      if (!is.null(sample)) {
        sampleID <- sampleID[sample]
        if (length(sampleID) == 0) {
          stop("Input in 'sample' is larger than the number of samples found in 'segments'", .call = FALSE)
        }
      }
      i <- i + 1
    }
    # Get the sampleIDs that are also found in other segmentations (if more than one)
    while (i <= length(all.segid)) {
      sampleID <- intersect(sampleID, all.segid[[i]])
      i <- i + 1
    }
    if (length(sampleID) == 0) {
      if (!is.null(data)) {
        stop("no sampleIDs are common in 'data' and 'segments'", .call = FALSE)
      } else {
        stop("no sampleIDs are common in all components of 'segments'", .call = FALSE)
      }
    }
  }


  # Check input sampleID and print errors or warnings if necessary:
  sampleID <- sampleID[!is.na(sampleID)] # could be NA if 'sample' is outside the number of samples represented in data/segments

  return(sampleID)
} # end checkSampleID
igordot/copynumber documentation built on Feb. 23, 2025, 1:47 a.m.