Select columns of a matrix (or list of matrices) by name
Source:R/Utilities.R
      select_cols_byname.RdArguments indicate which columns are to be retained and which are to be removed. For maximum flexibility, arguments are extended regex patterns that are matched against column names.
Usage
select_cols_byname(
  a,
  retain_pattern = "$^",
  remove_pattern = "$^",
  ignore.case = FALSE,
  perl = FALSE,
  fixed = FALSE,
  useBytes = FALSE
)Arguments
- a
 a matrix or a list of matrices
- retain_pattern
 an extended regex or list of extended regular expressions that specifies which columns of
mto retain. Default pattern ("$^") retains nothing.- remove_pattern
 an extended regex or list of extended regular expressions that specifies which columns of
mto remove. Default pattern ("$^") removes nothing.- ignore.case, perl, fixed, useBytes
 Arguments passed to
grep().
Details
If a is NULL, NULL is returned.
Patterns are compared against column names using extended regex.
If no column names of a match the retain_pattern, NULL is returned.
If no column names of a match the remove_pattern, a is returned.
Retaining columns takes precedence over removing columns, always.
Some typical patterns are:
"^Electricity$|^Oil$": column names that are EXACTLY "Electricity" or "Oil".
"^Electricity|^Oil": column names that START WITH "Electricity" or "Oil".
"Electricity|Oil": column names that CONTAIN "Electricity" or "Oil" anywhere within them.
Given a list of column names, a pattern can be constructed easily using
RCLabels::make_or_pattern().
RCLabels::make_or_pattern() escapes regex strings using Hmisc::escapeRegex().
This function assumes that retain_pattern and remove_pattern have already been
suitably escaped.
Note that the default retain_pattern and remove_pattern ("$^")
retain nothing and remove nothing.
If the row or column labels contain "[" or "]",
care should be taken to escape those characters.
Hmisc::escapeRegex() is helpful in such situations.
Note that if all columns are removed from a, NULL is returned.
Examples
m <- matrix(1:16, ncol = 4, dimnames=list(c(paste0("i", 1:4)), paste0("p", 1:4))) %>%
  setrowtype("Industries") %>% setcoltype("Commodities")
select_cols_byname(m, 
                   retain_pattern = RCLabels::make_or_pattern(c("p1", "p4"), 
                   pattern_type = "exact"))
#>    p1 p4
#> i1  1 13
#> i2  2 14
#> i3  3 15
#> i4  4 16
#> attr(,"rowtype")
#> [1] "Industries"
#> attr(,"coltype")
#> [1] "Commodities"
select_cols_byname(m, 
                   remove_pattern = RCLabels::make_or_pattern(c("p1", "p3"), 
                   pattern_type = "exact"))
#>    p2 p4
#> i1  5 13
#> i2  6 14
#> i3  7 15
#> i4  8 16
#> attr(,"rowtype")
#> [1] "Industries"
#> attr(,"coltype")
#> [1] "Commodities"
# Also works for lists and data frames
select_cols_byname(list(m,m), retain_pattern = "^p1$|^p4$")
#> [[1]]
#>    p1 p4
#> i1  1 13
#> i2  2 14
#> i3  3 15
#> i4  4 16
#> attr(,"rowtype")
#> [1] "Industries"
#> attr(,"coltype")
#> [1] "Commodities"
#> 
#> [[2]]
#>    p1 p4
#> i1  1 13
#> i2  2 14
#> i3  3 15
#> i4  4 16
#> attr(,"rowtype")
#> [1] "Industries"
#> attr(,"coltype")
#> [1] "Commodities"
#>