R: Different ways to select rows and columns

rowspecs {huxtable} | R Documentation

## Different ways to select rows and columns

### Description

This help page describes how to use the `row` and `col` arguments in `set_*` functions.

### The basics

The `set_*` functions for cell properties all have arguments like this: `set_property(ht, row, col, value, byrow = FALSE)`.

You can treat `row` and `col` arguments like arguments for data frame subsetting. For example, you can use `row = 1:3` to get the first three rows, `col = "salary"` to specify the column named "salary", or `row = ht$salary >= 50000` to specify rows where a condition is true.

There are also a few extra tricks you can use:

- Write `set_property(ht, x)`, omitting `row` and `col`, to set the property to `x` for all cells.

- Use `everywhere` to refer to all rows or all columns.

- Use `final(n)` to refer to the last n rows or columns.

- Use `evens` to get only even rows/columns and `odds` for only odd ones.

- Use `every(n, from = m)` to get every nth row/column starting at row/column m.

- Use `dplyr` functions like `starts_with`, `contains` and `matches` to specify columns (but not rows). See `select_helpers` for a full list.

- Use `where(condition)`, and omit the `col` argument, to get cells where `condition` is `TRUE`.

- Set `byrow = TRUE` to set properties by row rather than by column.

### The gory details

How the row and col arguments are parsed depends on the number of arguments passed to the `set_*` function.

- If there are two arguments (excluding `byrow`) then the second argument is taken as the value and is set for all rows and columns.

- If there are three arguments, then the third argument is taken as the value, and `row` must be a matrix with two columns. Each row of this matrix gives the row, column indices of a single cell. This uses R's little known feature of subsetting with matrices - see `base::Extract()`.

- If there are four arguments:

  - If `row` or `col` is numeric, character or logical, it is evaluated just as in standard subsetting. `col` will be evaluated in a special context provided by `tidyselect::with_vars()` to allow the use of dplyr functions.

  - If `row` or `col` is a function,it is called with two arguments: the huxtable, and the dimension number being evaluated, i.e. 1 for rows, 2 for columns. It must return a vector of column indices. `evens()`, `odds()`, `every()` and `final()` return functions for this purpose.

### Examples

    ht <- huxtable(a = 1:5, b = 5:1)

    set_bold(ht, 2:4, 1:2, TRUE)
    set_bold(ht, odds, evens, TRUE)
    set_bold(ht, everywhere, tidyselect::matches('[aeiou]'), TRUE)

    set_bold(ht, where(ht == 1), TRUE)

    set_text_color(ht, 2:3, 1:2, c('red', 'blue'))
    set_text_color(ht, 2:3, 1:2, c('red', 'blue'), byrow = TRUE)

[Package huxtable version 4.2.0 Index]