Skip to contents

Divide a GDS object into a list of GDS objects based on a grouping factor from col_data (subject-level metadata).

Usage

# S3 method for class 'gds'
split(x, f, drop = TRUE, ...)

Arguments

x

A GDS object.

f

A factor or character vector for splitting, OR a column name (as a string) from col_data(x).

drop

Logical; if TRUE, drop unused factor levels. Default TRUE.

...

Additional arguments (ignored).

Value

A named list of GDS objects, one per level of f.

Examples

beta <- array(rnorm(5 * 4), c(5, 4, 1))
var <- array(1, c(5, 4, 1))
gds <- new_gds(list(beta = beta, var = var), space_sample_labels(letters[1:5]),
               subjects = paste0("s", 1:4), contrasts = "c1",
               col_data = data.frame(group = c("patients", "controls",
                                               "patients", "controls"),
                                     row.names = paste0("s", 1:4)))

# Split by group column in col_data
gds_by_group <- split(gds, "group")
gds_by_group$patients  # GDS with only patient subjects
#> GDS
#>   dims: 5 x 2 x 1 [sample x subject x contrast]
#>   space: sample_labels n=5
#>   subjects: 2 (s1, s3)
#>   contrasts: 1 (c1)
#>   assays: beta[location], var[variance]
subjects(gds_by_group$controls)
#> [1] "s2" "s4"

# Or provide a factor directly
groups <- factor(c("A", "B", "A", "B"))
gds_split <- split(gds, groups)
names(gds_split)
#> [1] "A" "B"