ratio <- function(instance, vara, varb) {
 stopifnot(vara %in% names(instance), varb %in% names(instance))
 rat <- instance[vara] / instance[varb]
 if (any(is.infinite(rat))) warning(paste("Infinite values in ratio " , vara, varb ))
 rat
}
#'  Requires max path distance as well. That is, it works on summarized data.
#'  @export
compute_derived <- function(cell_vars) {
  newvars <- numeric()
  newvars[['ratio_x']] <- ratio(cell_vars, 'width' , 'x_sd')
  newvars[['ratio_y']] <- ratio(cell_vars, 'height' , 'y_sd')
  newvars[['density_bifs']] <- ratio(cell_vars, 'N_bifurcations' , 'total_length')
  newvars[['density_dist']] <-  ratio(cell_vars, 'node_root_path.max' , 'total_length')
  newvars[['aspect_ratio']] <-  ratio(cell_vars, 'dims.PC1' , 'dims.PC2')
  # not currently computed i think
  # newvars[['density_area']] <-  ratio(cell_vars, 'grid_area' , 'total_length')
  newvars[['tree_length.avg']] <- ratio(cell_vars, 'total_length' , 'N_stems')
  # check none of new names already in instance
  stopifnot(!any(names(newvars) %in% names(cell_vars)))
  c(cell_vars, newvars)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.