dbOutput_add_calculated_field: Add new field(s) to a table in dbOutput that is/are based on...

Description Usage Arguments Value Details Examples

View source: R/OutputDatabase_DataAccess.R

Description

Add new field(s) to a table in dbOutput that is/are based on a calculation of values from (an) existing field(s)

Usage

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
dbOutput_add_calculated_field(
  dbOut_fname,
  table,
  vars_orig,
  vars_new,
  FUN,
  ...,
  overwrite = FALSE,
  verbose = FALSE,
  chunk_size = 1e+05
)

Arguments

dbOut_fname

A character string. The path to the output database.

table

A character string. The table name to which the new field(s) should be appended.

vars_orig

A vector of character strings. The existing field names that are used by FUN to calculate vars_new.

vars_new

A vector of character strings. The names of new fields. The number must match the number of columns returned by FUN.

FUN

A function. See details.

...

Additional named arguments to FUN. See details.

overwrite

A logical value. If vars_new already exists and overwrite is TRUE, then the content of the fields vars_new will be replaced. If vars_new already exists and overwrite is FALSE, then the function stops with an error.

verbose

A logical value.

chunk_size

An integer value.

Value

The function is called for its side-effects on dbOut_fname.

Details

The first argument of FUN must be a two-dimensional object. This object contains the extracted values from dbOut_fname, i.e., it has up to chunk_size rows and the columns are vars_orig. Additional arguments can be passed via .... The function must return a value (or values) corresponding to vars_new for each row. These values are inserted into the new field(s).

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
if (requireNamespace("RSQLite")) {
# Prepare database
dbOut_tmp <- tempfile(fileext = ".sqlite")
con <- RSQLite::dbConnect(RSQLite::SQLite(), dbOut_tmp)
data(iris)
x <- data.frame(P_id = seq_len(nrow(iris)), iris)
RSQLite::dbWriteTable(con, "iris", x)
RSQLite::dbDisconnect(con)

# Define calculation function
vars_orig <- c("Sepal.Length", "Sepal.Width")
example_calc <- function(x, delta = 1, ...) {
  apply(x, MARGIN = 1, function(x) delta * prod(x))
}

# Create new field based on a calculation
dbOutput_add_calculated_field(
  dbOut_fname = dbOut_tmp,
  table = "iris",
  vars_orig = vars_orig,
  vars_new = "calc",
  FUN = example_calc, delta = 2)

# Check the new field
con <- RSQLite::dbConnect(RSQLite::SQLite(), dbOut_tmp)
xout <- RSQLite::dbReadTable(con, "iris")
RSQLite::dbDisconnect(con)

res2 <- example_calc(x[, vars_orig], delta = 2)
all.equal(xout[, "calc"], res2)

# Cleanup
unlink(dbOut_tmp)
}

Burke-Lauenroth-Lab/rSFSW2 documentation built on Aug. 14, 2020, 5:20 p.m.