diff --git a/R/format.function.R b/R/format.function.R
index f7657876bee6f8a9f42c486a2b7aaeb3e6aa79b1..bba7c64ef3e55e1c7733d1de876fbfb5486ddb2b 100644
--- a/R/format.function.R
+++ b/R/format.function.R
@@ -1,305 +1,1021 @@
 
-################################################### FUNCTION TO FORMAT DATA FOR THE WORKSHOP ANALYSIS
-
-
-###### FUNCTION TO PLOT MAP OF TREE
-##' .. Function to plot map of tree with circle function of their dbh..
-##'
-##' .. content for \details{} ..
-##' @title 
-##' @param plot.select the plot for which draw the map
-##' @param x 
-##' @param y 
-##' @param plot vectore of plot id for each tree
-##' @param D diameter in cm
-##' @param inches controling the circle size
-##' @param ... 
-##' @return 
-##' @author Kunstler
-fun.circles.plot <- function(plot.select, x, y, plot, D, inches, ...) {
-    x.t <- x[plot == plot.select]
-    y.t <- y[plot == plot.select]
-    D.t <- D[plot == plot.select]
-    D.t[is.na(D.t)] <- 0
-    symbols(x.t, y.t, circles = D.t, main = plot.select, inches = inches, ...)
-}
-
-
-
-######################### 
-##' .. Compute the basal area of competitor in a plot..
-##'
-##' .. content for \details{} ..
-##' @title 
-##' @param diam diameters of each individuals in cm
-##' @param weights weight to compute the basal area in cm^2/m^2
-##' @return basal area in cm^2/m^2 
-##' @author Kunstler
-BA.fun <- function(diam, weights) {
-    ((diam/2)^2) * pi * weights
-}
-
-
-
-
-#### 
-##' .. function to compute the basal area of neighborood tree in plots ..
-##'
-##' .. content for \details{} ..
-##' @title 
-##' @param obs.id tree obs identifier
-##' @param diam diam of tree in cm
-##' @param sp species name or code
-##' @param id.plot identifier of the plot
-##' @param weights weights to compute basal area in cm^2/m^2 SO THE 1/AREA of teh plot (or subplot) with area in m^2
-##' @param weights.full.plot weights for the whole plot to compute basal area in cm^2/m^2 or if NA use weights of the individuals (for simple plots)
-##' @return data frame with tree.id and one column per species with basal area of the species (without the target tree)
-##' @author Kunstler
-BA.SP.FUN <- function(obs.id, diam, sp, id.plot, weights, weight.full.plot) {
-    require(data.table, quietly=TRUE)
-    id.plot <- as.character(id.plot)
-    obs.id <- as.character(obs.id)
+
+
+<!DOCTYPE html>
+<html>
+  <head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# githubog: http://ogp.me/ns/fb/githubog#">
+    <meta charset='utf-8'>
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+        <title>data.format.workshop/R/format.function.R at aa116602f68362615eaefb2781a283cff4b0bb8a · kunstler/data.format.workshop</title>
+    <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub" />
+    <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub" />
+    <link rel="apple-touch-icon" sizes="57x57" href="/apple-touch-icon-114.png" />
+    <link rel="apple-touch-icon" sizes="114x114" href="/apple-touch-icon-114.png" />
+    <link rel="apple-touch-icon" sizes="72x72" href="/apple-touch-icon-144.png" />
+    <link rel="apple-touch-icon" sizes="144x144" href="/apple-touch-icon-144.png" />
+    <link rel="logo" type="image/svg" href="https://github-media-downloads.s3.amazonaws.com/github-logo.svg" />
+    <meta property="og:image" content="https://github.global.ssl.fastly.net/images/modules/logos_page/Octocat.png">
+    <meta name="hostname" content="github-fe117-cp1-prd.iad.github.net">
+    <meta name="ruby" content="ruby 1.9.3p194-tcs-github-tcmalloc (2012-05-25, TCS patched 2012-05-27, GitHub v1.0.32) [x86_64-linux]">
+    <link rel="assets" href="https://github.global.ssl.fastly.net/">
+    <link rel="xhr-socket" href="/_sockets" />
     
-    ## check equal length
-    if (!(length(obs.id) == length(diam) & length(obs.id) == length(sp) & length(obs.id) == 
-        length(id.plot) & length(obs.id) == length(weights))) 
-        stop("length of obs.id diam,sp id.plot & weights need to be the same")
     
-    ## check sp is not numeric
-    if (is.numeric(sp)) 
-        stop("sp can not be numeric need to be charatcer do paste('sp',sp,sep='.')")
+
+
+    <meta name="msapplication-TileImage" content="/windows-tile.png" />
+    <meta name="msapplication-TileColor" content="#ffffff" />
+    <meta name="selected-link" value="repo_source" data-pjax-transient />
+    <meta content="collector.githubapp.com" name="octolytics-host" /><meta content="github" name="octolytics-app-id" /><meta content="3589590" name="octolytics-actor-id" /><meta content="dfalster" name="octolytics-actor-login" /><meta content="81d4cd32b4b2ac6254f7cb479bd6ac361a1bee4ee2d64e18d1b413f23fda5c08" name="octolytics-actor-hash" />
     
-    # compute BA tot per species per plot
-    BASP <- tapply(BA.fun(diam, weights), INDEX = list(id.plot, sp), FUN = sum, na.rm = T)
-    print(dim(BASP))
-    DATA.BASP <- data.table(id.plot = rownames(BASP), BASP)
-    setnames(DATA.BASP, old = 1:ncol(DATA.BASP), c("id.plot", colnames(BASP)))
-    setkeyv(DATA.BASP, c("id.plot"))
-    sp.name <- colnames(BASP)
-    rm(BASP)
-    print("first table created")
-    #### MERGE with indivudal tree use library(data.table)
-    if (!is.na(weight.full.plot)) {
-        data.indiv <- data.table(obs.id = obs.id, sp = sp, id.plot = id.plot, diam = diam, 
-            BA.indiv = BA.fun(diam, rep(weight.full.plot, length(diam))))
-        setkeyv(data.indiv, "id.plot")
-        print("second table created")
-        data.merge <- merge(data.indiv, DATA.BASP)
-        print("merge done")
-        # substract target BA
-        for (i in (sp.name)) {
-            eval(parse(text = paste("data.merge[sp=='", i, "',", i, ":=", i, "-BA.indiv]", 
-                sep = "")))
-        }
-        
-    } else {
-        data.indiv <- data.table(obs.id = obs.id, sp = sp, id.plot = id.plot, diam = diam, 
-            weights = weights, BA.indiv = BA.fun(diam, weights))
-        setkeyv(data.indiv, "id.plot")
-        print("second table created")
-        data.merge <- merge(data.indiv, DATA.BASP)
-        print("merge done")
-        for (i in (sp.name)) {
-            eval(parse(text = paste("data.merge[sp=='", i, "',", i, ":=", i, "-BA.indiv]", 
-                sep = "")))
-        }
-    }
-    print("replacment done")
-    data.merge[, `:=`(BA.indiv, NULL)]
-    print("first column removed")
-    #### delete column not used
-    data.merge[, `:=`(sp, NULL)]
-    data.merge[, `:=`(diam, NULL)]
-    data.merge[, `:=`(id.plot, NULL)]
-    data.merge[, `:=`(weights, NULL)]
-    print("columns removed")
-    return((data.merge))
-}
-
-#### 
-##' .. function compute competition index with X Y coordinates based on a neighborhood of radius R ..
-##'
-##' .. content for \details{} ..
-##' @title 
-##' @param obs.id id of the observation (if one tree as multiple growth measurement one obs.id per measurment
-##' @param xy.table table with x.y of teh individual
-##' @param diam diam in cm
-##' @param sp species
-##' @param Rlim radius of neighborhood search
-##' @param parallel run in paralle or not ?
-##' @param rpuDist run with GPU distance computation
-##' @return a data frame with nrow = length of obs.id and ncol =unique(sp)
-##' @author Kunstler
-BA.SP.FUN.XY <- function(obs.id, xy.table, diam, sp, Rlim, parallel = FALSE, rpuDist = FALSE) {
-    rownames(xy.table) <- obs.id
-    if (rpuDist) {
-        require(rpud, quietly=TRUE)
-        dist.mat <- rpuDist(xy.table, upper = TRUE, diag = TRUE)
-    } else {
-        dist.mat <- as.matrix(dist(xy.table, upper = TRUE, diag = TRUE))
-    }
-    print("distance matrix computed")
-    dist.mat[dist.mat < Rlim] <- 1
-    dist.mat[dist.mat > Rlim] <- 0
-    diag(dist.mat) <- 0
-    print("distance matrix set to 0 1")
-    BA <- BA.fun(diam, weights = 1/(pi * Rlim^2))
-    BA.mat <- matrix(rep(BA, length(BA)), nrow = length(BA), byrow = TRUE)
-    print("starting tapply over species")
-    fun.sum.sp <- function(x, sp) tapply(x, INDEX = sp, FUN = sum, na.rm = TRUE)
-    if (parallel) {
-        ## parallel version
-        require(doParallel, quietly=TRUE)
-        registerDoParallel(cores = 4)
-        mat <- dist.mat * BA.mat
-        res.temp <- foreach(i = 1:nrow(mat), .combine = rbind) %dopar% {
-            fun.sum.sp(mat[i, ], sp)
-        }
-        rownames(res.temp) <- obs.id
-        return((res.temp))
-    } else {
-        res.temp <- t(apply(dist.mat * BA.mat, MARGIN = 1, FUN = fun.sum.sp, sp))
-        return(res.temp)
-    }
-}
-
-
-############################ FUNCTION remove trailing white space
-trim.trailing <- function(x) sub("\\s+$", "", x)
-
-## clean species.tab
-fun.clean.species.tab <- function(species.tab) {
-    species.tab2 <- species.tab[!is.na(species.tab$Latin_name), ]
+
     
-    ### species IFN reformat names clean species names and synonyme names
-    species.tab2$Latin_name <- (gsub("_", " ", species.tab2$Latin_name))
-    species.tab2$Latin_name_syn <- (gsub("_", " ", species.tab2$Latin_name_syn))
-    ## remove trailing white space
-    species.tab2$Latin_name_syn <- trim.trailing(species.tab2$Latin_name_syn)
     
-    species.clean <- species.tab2[!duplicated(species.tab2$Latin_name), c("code", 
-        "Latin_name", "Exotic_Native_cultivated")]
-    return(species.clean)
-}
-
-
-### compute quantile 99% and sd with a bootstrap
-
-library(boot, quietly=TRUE)
-
-f.quantile <- function(x, ind, probs) {
-    quantile(x[ind], probs = probs, na.rm = TRUE)
-}
-
-f.quantile.boot <- function(i, x, fac, R, probs = 0.99) {
-    require(boot, quietly=TRUE)
-    if (length(na.exclude(x[fac == i])) > 0) {
-        quant.boot <- boot(x[fac == i], f.quantile, R = R, probs = probs)
-        return(as.matrix(c(mean = mean(quant.boot$t), sd = sd(quant.boot$t), nobs = length(na.exclude(x[fac == 
-            i]))), ncol = 3, nrow = 1))
-    } else {
-        return(as.matrix(c(mean = NA, sd = NA, nobs = NA), ncol = 3, nrow = 1))
-    }
-}
-
-####################### function to compute number of dead per plot
-function.perc.dead <- function(dead) {
-    sum(dead)/length(dead)
-}
-
-
-function.perc.dead2 <- function(dead) {
-    out <- sum(dead, na.rm = T)/length(dead[!is.na(dead)])
-    if (!is.finite(out)) 
-        out <- NA
-    return(out)
-}
-
-
-########################## GENERATE A R.object per ecoregion
-
-function.replace.NA.negative <- function(data.BA.SP) {
-    for (i in 2:ncol(data.BA.SP)) {
-        eval(parse(text = paste("data.BA.SP[is.na(", names(data.BA.SP)[i], "),", 
-            names(data.BA.SP)[i], ":=0]", sep = "")))
-        eval(parse(text = paste("data.BA.SP[", names(data.BA.SP)[i], "<0,", names(data.BA.SP)[i], 
-            ":=0]", sep = "")))
-    }
-    print("NA and negative replaced")
-    return(data.BA.SP)
-}
-
-############################################################## function to generate data in good format per ecoregion
-fun.data.per.ecoregion <- function(ecoregion, data.tot, plot.name, weight.full.plot, 
-    name.country, data.TRY = NA, species.lookup = NA, output.dir = "./data/process") {
-    require(data.table, quietly=TRUE)
+    <link rel="icon" type="image/x-icon" href="/favicon.ico" />
+
+    <meta content="authenticity_token" name="csrf-param" />
+<meta content="IvSvLDPX7poD94qLS3z1dpVzB3Zg/hDxqhNAoXguQvk=" name="csrf-token" />
+
+    <link href="https://github.global.ssl.fastly.net/assets/github-97020e63389b457c7059f1557de29634b92d5217.css" media="all" rel="stylesheet" type="text/css" />
+    <link href="https://github.global.ssl.fastly.net/assets/github2-f5edf5ff11f3bc18a48b1de19e5e21e197c40f0e.css" media="all" rel="stylesheet" type="text/css" />
     
-    print(paste("Working on Ecoregion %s", ecoregion))
-    data <- data.table(data.tot)[ecocode == ecoregion, ]
-    data.BA.SP <- BA.SP.FUN(obs.id = as.vector(data[["obs.id"]]), diam = as.vector(data[["D"]]), 
-        sp = as.vector(data[["sp"]]), id.plot = as.vector(data[[plot.name]]), weights = data[["weights"]], 
-        weight.full.plot = weight.full.plot)
+
+
+      <script src="https://github.global.ssl.fastly.net/assets/frameworks-f86a2975a82dceee28e5afe598d1ebbfd7109d79.js" type="text/javascript"></script>
+      <script src="https://github.global.ssl.fastly.net/assets/github-240d8ce10d13184c7765e1c5222b793e8dd363f4.js" type="text/javascript"></script>
+      
+      <meta http-equiv="x-pjax-version" content="1ec363f07a500fc740e5cabfeae8bc56">
+
+        <link data-pjax-transient rel='permalink' href='/kunstler/data.format.workshop/blob/aa116602f68362615eaefb2781a283cff4b0bb8a/R/format.function.R'>
+  <meta property="og:title" content="data.format.workshop"/>
+  <meta property="og:type" content="githubog:gitrepository"/>
+  <meta property="og:url" content="https://github.com/kunstler/data.format.workshop"/>
+  <meta property="og:image" content="https://github.global.ssl.fastly.net/images/gravatars/gravatar-user-420.png"/>
+  <meta property="og:site_name" content="GitHub"/>
+  <meta property="og:description" content="data.format.workshop - formatting of the data for the workshop"/>
+
+  <meta name="description" content="data.format.workshop - formatting of the data for the workshop" />
+
+  <meta content="4505188" name="octolytics-dimension-user_id" /><meta content="kunstler" name="octolytics-dimension-user_login" /><meta content="12124591" name="octolytics-dimension-repository_id" /><meta content="kunstler/data.format.workshop" name="octolytics-dimension-repository_nwo" /><meta content="false" name="octolytics-dimension-repository_public" /><meta content="false" name="octolytics-dimension-repository_is_fork" /><meta content="12124591" name="octolytics-dimension-repository_network_root_id" /><meta content="kunstler/data.format.workshop" name="octolytics-dimension-repository_network_root_nwo" />
+  <link href="https://github.com/kunstler/data.format.workshop/commits/aa116602f68362615eaefb2781a283cff4b0bb8a.atom?login=dfalster&token=6283e6252e76e3e8e802b29733ae0a13" rel="alternate" title="Recent Commits to data.format.workshop:aa116602f68362615eaefb2781a283cff4b0bb8a" type="application/atom+xml" />
+
+  </head>
+
+
+  <body class="logged_in page-blob macintosh vis-private env-production ">
+
+    <div class="wrapper">
+      
+      
+      
+
+
+      <div class="header header-logged-in true">
+  <div class="container clearfix">
+
+    <a class="header-logo-invertocat" href="https://github.com/">
+  <span class="mega-octicon octicon-mark-github"></span>
+</a>
+
+    <div class="divider-vertical"></div>
+
+    
+    <a href="/notifications" class="notification-indicator tooltipped downwards" data-gotokey="n" title="You have unread notifications">
+        <span class="mail-status unread"></span>
+</a>    <div class="divider-vertical"></div>
+
+
+      <div class="command-bar js-command-bar  in-repository">
+          <form accept-charset="UTF-8" action="/search" class="command-bar-form" id="top_search_form" method="get">
+
+<input type="text" data-hotkey=" s" name="q" id="js-command-bar-field" placeholder="Search or type a command" tabindex="1" autocapitalize="off"
     
-    print("competition index computed")
-    ## change NA and <0 data for 0
-    data.BA.SP <- function.replace.NA.negative(data.BA.SP)
-    ### CHECK IF sp and sp name for column are the same
-    if (sum(!(names(data.BA.SP)[-1] %in% unique(data[["sp"]]))) > 0) 
-        stop("competition index sp name not the same as in data")
-    #### compute BA tot for all competitors data.BA.SP[,BATOT:=sum(.SD),by=obs.id] ##
-    #### slower than apply why??
-    BATOT.s <- apply(data.frame(data.BA.SP)[, -1], MARGIN = 1, FUN = sum)
-    data.BA.SP[, `:=`(BATOT, BATOT.s)]
-    print("BATOT COMPUTED")
-    ### create data frame
-    DT.temp <- data.table(obs.id = data[["obs.id"]], ecocode = data[["ecocode"]])
-    setkeyv(DT.temp, "obs.id")
-    setkeyv(data.BA.SP, "obs.id")
-    print("starting last merge")
-    data.BA.sp <- merge(DT.temp, data.BA.SP)
-    ## reorder data
-    data <- data.table(data)
-    setkeyv(data, "obs.id")
-    ## test if same order
-    if (sum(!data.BA.sp[["obs.id"]] == data[["obs.id"]]) > 0) 
-        stop("competition index not in the same order than data")
-    ##### ADD TRY DATA OR TRAITS IF NEEDED
-    data.traits = NA
-    if (!is.na(data.TRY)) {
-        sp.extract <- species.lookup[species.lookup[["sp"]] %in% unique(data[["sp"]]), ]
-        data.traits <- fun.extract.format.sp.traits.TRY(sp = sp.extract[["sp"]], 
-            sp.syno.table = sp.extract, data.TRY)
-    } 
+    data-username="dfalster"
+      data-repo="kunstler/data.format.workshop"
+      data-branch=""
+      data-sha="6a46028eecbc1b057992913923128a96ca7382cb"
+  >
+
+    <input type="hidden" name="nwo" value="kunstler/data.format.workshop" />
+
+    <div class="select-menu js-menu-container js-select-menu search-context-select-menu">
+      <span class="minibutton select-menu-button js-menu-target">
+        <span class="js-select-button">This repository</span>
+      </span>
+
+      <div class="select-menu-modal-holder js-menu-content js-navigation-container">
+        <div class="select-menu-modal">
+
+          <div class="select-menu-item js-navigation-item js-this-repository-navigation-item selected">
+            <span class="select-menu-item-icon octicon octicon-check"></span>
+            <input type="radio" class="js-search-this-repository" name="search_target" value="repository" checked="checked" />
+            <div class="select-menu-item-text js-select-button-text">This repository</div>
+          </div> <!-- /.select-menu-item -->
+
+          <div class="select-menu-item js-navigation-item js-all-repositories-navigation-item">
+            <span class="select-menu-item-icon octicon octicon-check"></span>
+            <input type="radio" name="search_target" value="global" />
+            <div class="select-menu-item-text js-select-button-text">All repositories</div>
+          </div> <!-- /.select-menu-item -->
+
+        </div>
+      </div>
+    </div>
+
+  <span class="octicon help tooltipped downwards" title="Show command bar help">
+    <span class="octicon octicon-question"></span>
+  </span>
+
+
+  <input type="hidden" name="ref" value="cmdform">
+
+</form>
+        <ul class="top-nav">
+          <li class="explore"><a href="/explore">Explore</a></li>
+            <li><a href="https://gist.github.com">Gist</a></li>
+            <li><a href="/blog">Blog</a></li>
+          <li><a href="https://help.github.com">Help</a></li>
+        </ul>
+      </div>
+
+    
+
+
+  <ul id="user-links">
+    <li>
+      <a href="/dfalster" class="name">
+        <img height="20" src="https://2.gravatar.com/avatar/fbdbef80e8abe7e4a1dc2adf9894eebf?d=https%3A%2F%2Fidenticons.github.com%2F56ec7ab96571a9c83a9e8c0b3bcdb66a.png&amp;s=140" width="20" /> dfalster
+      </a>
+    </li>
+
+      <li>
+        <a href="/new" id="new_repo" class="tooltipped downwards" title="Create a new repo" aria-label="Create a new repo">
+          <span class="octicon octicon-repo-create"></span>
+        </a>
+      </li>
+
+      <li>
+        <a href="/settings/profile" id="account_settings"
+          class="tooltipped downwards"
+          aria-label="Account settings "
+          title="Account settings ">
+          <span class="octicon octicon-tools"></span>
+        </a>
+      </li>
+      <li>
+        <a class="tooltipped downwards" href="/logout" data-method="post" id="logout" title="Sign out" aria-label="Sign out">
+          <span class="octicon octicon-log-out"></span>
+        </a>
+      </li>
+
+  </ul>
+
+<div class="js-new-dropdown-contents hidden">
+  
+
+<ul class="dropdown-menu">
+  <li>
+    <a href="/new"><span class="octicon octicon-repo-create"></span> New repository</a>
+  </li>
+  <li>
+    <a href="/organizations/new"><span class="octicon octicon-organization"></span> New organization</a>
+  </li>
+
+
+
+    <li class="section-title">
+      <span title="kunstler/data.format.workshop">This repository</span>
+    </li>
+    <li>
+      <a href="/kunstler/data.format.workshop/issues/new"><span class="octicon octicon-issue-opened"></span> New issue</a>
+    </li>
+</ul>
+
+</div>
+
+
     
-    ## save everything as a list
-    list.temp <- list(data.tree = data, data.BA.SP = data.BA.sp, data.traits = data.traits)
-    save(list.temp, file = file.path(output.dir,paste("list", name.country, ecoregion, 
-        "Rdata", sep = ".")))
-}
-
-
-##################################### FUNCTION TO COMPUTE BA.SP.XY PER PLOT AND MERGE TOGETHER function to be apply
-##################################### per site
-fun.compute.BA.SP.XY.per.plot <- function(i, data.tree, Rlim, xy.name = c("x", "y"), 
-    parallel = FALSE, rpuDist = FALSE) {
-    data.tree.s <- subset(data.tree, subset = data.tree[["plot"]] == i)
-    BA.SP.temp <- BA.SP.FUN.XY(obs.id = data.tree.s[["obs.id"]], xy.table = data.tree.s[, 
-        xy.name], diam = data.tree.s[["D"]], sp = (data.tree.s[["sp"]]), Rlim = 15, 
-        parallel = FALSE, rpuDist = FALSE)
+  </div>
+</div>
+
+      
+
+      
+
+
+
+
+          <div class="site" itemscope itemtype="http://schema.org/WebPage">
     
-    ## replace NA per zero
-    print("replacing NA per zero")
-    BA.SP.temp[is.na(BA.SP.temp)] <- 0
-    print("done")
-    ### rpud installation very cumbersome not needed ?  longer in parallel why ?
-    if (sum(!rownames(BA.SP.temp) == data.tree.s[["obs.id"]]) > 0) 
-        stop("rows not in the good order")
-    if (sum(!colnames(BA.SP.temp) == as.character((levels(data.tree.s[["sp"]])))) > 
-        0) 
-        stop("colnames does mot match species name")
+    <div class="pagehead repohead instapaper_ignore readability-menu">
+      <div class="container">
+        
+
+<ul class="pagehead-actions">
+
+    <li class="subscription">
+      <form accept-charset="UTF-8" action="/notifications/subscribe" class="js-social-container" data-autosubmit="true" data-remote="true" method="post"><div style="margin:0;padding:0;display:inline"><input name="authenticity_token" type="hidden" value="IvSvLDPX7poD94qLS3z1dpVzB3Zg/hDxqhNAoXguQvk=" /></div>  <input id="repository_id" name="repository_id" type="hidden" value="12124591" />
+
+    <div class="select-menu js-menu-container js-select-menu">
+        <a class="social-count js-social-count" href="/kunstler/data.format.workshop/watchers">
+          2
+        </a>
+      <span class="minibutton select-menu-button with-count js-menu-target">
+        <span class="js-select-button">
+          <span class="octicon octicon-eye-unwatch"></span>
+          Unwatch
+        </span>
+      </span>
+
+      <div class="select-menu-modal-holder">
+        <div class="select-menu-modal subscription-menu-modal js-menu-content">
+          <div class="select-menu-header">
+            <span class="select-menu-title">Notification status</span>
+            <span class="octicon octicon-remove-close js-menu-close"></span>
+          </div> <!-- /.select-menu-header -->
+
+          <div class="select-menu-list js-navigation-container">
+
+            <div class="select-menu-item js-navigation-item ">
+              <span class="select-menu-item-icon octicon octicon-check"></span>
+              <div class="select-menu-item-text">
+                <input id="do_included" name="do" type="radio" value="included" />
+                <h4>Not watching</h4>
+                <span class="description">You only receive notifications for discussions in which you participate or are @mentioned.</span>
+                <span class="js-select-button-text hidden-select-button-text">
+                  <span class="octicon octicon-eye-watch"></span>
+                  Watch
+                </span>
+              </div>
+            </div> <!-- /.select-menu-item -->
+
+            <div class="select-menu-item js-navigation-item selected">
+              <span class="select-menu-item-icon octicon octicon octicon-check"></span>
+              <div class="select-menu-item-text">
+                <input checked="checked" id="do_subscribed" name="do" type="radio" value="subscribed" />
+                <h4>Watching</h4>
+                <span class="description">You receive notifications for all discussions in this repository.</span>
+                <span class="js-select-button-text hidden-select-button-text">
+                  <span class="octicon octicon-eye-unwatch"></span>
+                  Unwatch
+                </span>
+              </div>
+            </div> <!-- /.select-menu-item -->
+
+            <div class="select-menu-item js-navigation-item ">
+              <span class="select-menu-item-icon octicon octicon-check"></span>
+              <div class="select-menu-item-text">
+                <input id="do_ignore" name="do" type="radio" value="ignore" />
+                <h4>Ignoring</h4>
+                <span class="description">You do not receive any notifications for discussions in this repository.</span>
+                <span class="js-select-button-text hidden-select-button-text">
+                  <span class="octicon octicon-mute"></span>
+                  Stop ignoring
+                </span>
+              </div>
+            </div> <!-- /.select-menu-item -->
+
+          </div> <!-- /.select-menu-list -->
+
+        </div> <!-- /.select-menu-modal -->
+      </div> <!-- /.select-menu-modal-holder -->
+    </div> <!-- /.select-menu -->
+
+</form>
+    </li>
+
+  <li>
+  
+<div class="js-toggler-container js-social-container starring-container ">
+  <a href="/kunstler/data.format.workshop/unstar" class="minibutton with-count js-toggler-target star-button starred upwards" title="Unstar this repo" data-remote="true" data-method="post" rel="nofollow">
+    <span class="octicon octicon-star-delete"></span><span class="text">Unstar</span>
+  </a>
+  <a href="/kunstler/data.format.workshop/star" class="minibutton with-count js-toggler-target star-button unstarred upwards" title="Star this repo" data-remote="true" data-method="post" rel="nofollow">
+    <span class="octicon octicon-star"></span><span class="text">Star</span>
+  </a>
+  <a class="social-count js-social-count" href="/kunstler/data.format.workshop/stargazers">0</a>
+</div>
+
+  </li>
+
+
+        <li>
+          <a href="/kunstler/data.format.workshop/fork" class="minibutton with-count js-toggler-target fork-button lighter upwards" title="Fork this repo" rel="facebox nofollow">
+            <span class="octicon octicon-git-branch-create"></span><span class="text">Fork</span>
+          </a>
+          <a href="/kunstler/data.format.workshop/network" class="social-count">0</a>
+        </li>
+
+
+</ul>
+
+        <h1 itemscope itemtype="http://data-vocabulary.org/Breadcrumb" class="entry-title private">
+          <span class="repo-label"><span>private</span></span>
+          <span class="mega-octicon octicon-lock"></span>
+          <span class="author">
+            <a href="/kunstler" class="url fn" itemprop="url" rel="author"><span itemprop="title">kunstler</span></a></span
+          ><span class="repohead-name-divider">/</span><strong
+          ><a href="/kunstler/data.format.workshop" class="js-current-repository js-repo-home-link">data.format.workshop</a></strong>
+
+          <span class="page-context-loader">
+            <img alt="Octocat-spinner-32" height="16" src="https://github.global.ssl.fastly.net/images/spinners/octocat-spinner-32.gif" width="16" />
+          </span>
+
+        </h1>
+      </div><!-- /.container -->
+    </div><!-- /.repohead -->
+
+    <div class="container">
+
+      <div class="repository-with-sidebar repo-container ">
+
+        <div class="repository-sidebar">
+            
+
+<div class="repo-nav repo-nav-full js-repository-container-pjax js-octicon-loaders">
+  <div class="repo-nav-contents">
+    <ul class="repo-menu">
+      <li class="tooltipped leftwards" title="Code">
+        <a href="/kunstler/data.format.workshop" aria-label="Code" class="js-selected-navigation-item selected" data-gotokey="c" data-pjax="true" data-selected-links="repo_source repo_downloads repo_commits repo_tags repo_branches /kunstler/data.format.workshop">
+          <span class="octicon octicon-code"></span> <span class="full-word">Code</span>
+          <img alt="Octocat-spinner-32" class="mini-loader" height="16" src="https://github.global.ssl.fastly.net/images/spinners/octocat-spinner-32.gif" width="16" />
+</a>      </li>
+
+        <li class="tooltipped leftwards" title="Issues">
+          <a href="/kunstler/data.format.workshop/issues" aria-label="Issues" class="js-selected-navigation-item js-disable-pjax" data-gotokey="i" data-selected-links="repo_issues /kunstler/data.format.workshop/issues">
+            <span class="octicon octicon-issue-opened"></span> <span class="full-word">Issues</span>
+            <span class='counter'>0</span>
+            <img alt="Octocat-spinner-32" class="mini-loader" height="16" src="https://github.global.ssl.fastly.net/images/spinners/octocat-spinner-32.gif" width="16" />
+</a>        </li>
+
+      <li class="tooltipped leftwards" title="Pull Requests"><a href="/kunstler/data.format.workshop/pulls" aria-label="Pull Requests" class="js-selected-navigation-item js-disable-pjax" data-gotokey="p" data-selected-links="repo_pulls /kunstler/data.format.workshop/pulls">
+            <span class="octicon octicon-git-pull-request"></span> <span class="full-word">Pull Requests</span>
+            <span class='counter'>0</span>
+            <img alt="Octocat-spinner-32" class="mini-loader" height="16" src="https://github.global.ssl.fastly.net/images/spinners/octocat-spinner-32.gif" width="16" />
+</a>      </li>
+
+
+        <li class="tooltipped leftwards" title="Wiki">
+          <a href="/kunstler/data.format.workshop/wiki" aria-label="Wiki" class="js-selected-navigation-item " data-pjax="true" data-selected-links="repo_wiki /kunstler/data.format.workshop/wiki">
+            <span class="octicon octicon-book"></span> <span class="full-word">Wiki</span>
+            <img alt="Octocat-spinner-32" class="mini-loader" height="16" src="https://github.global.ssl.fastly.net/images/spinners/octocat-spinner-32.gif" width="16" />
+</a>        </li>
+    </ul>
+    <div class="repo-menu-separator"></div>
+    <ul class="repo-menu">
+
+      <li class="tooltipped leftwards" title="Pulse">
+        <a href="/kunstler/data.format.workshop/pulse" aria-label="Pulse" class="js-selected-navigation-item " data-pjax="true" data-selected-links="pulse /kunstler/data.format.workshop/pulse">
+          <span class="octicon octicon-pulse"></span> <span class="full-word">Pulse</span>
+          <img alt="Octocat-spinner-32" class="mini-loader" height="16" src="https://github.global.ssl.fastly.net/images/spinners/octocat-spinner-32.gif" width="16" />
+</a>      </li>
+
+      <li class="tooltipped leftwards" title="Graphs">
+        <a href="/kunstler/data.format.workshop/graphs" aria-label="Graphs" class="js-selected-navigation-item " data-pjax="true" data-selected-links="repo_graphs repo_contributors /kunstler/data.format.workshop/graphs">
+          <span class="octicon octicon-graph"></span> <span class="full-word">Graphs</span>
+          <img alt="Octocat-spinner-32" class="mini-loader" height="16" src="https://github.global.ssl.fastly.net/images/spinners/octocat-spinner-32.gif" width="16" />
+</a>      </li>
+
+      <li class="tooltipped leftwards" title="Network">
+        <a href="/kunstler/data.format.workshop/network" aria-label="Network" class="js-selected-navigation-item js-disable-pjax" data-selected-links="repo_network /kunstler/data.format.workshop/network">
+          <span class="octicon octicon-git-branch"></span> <span class="full-word">Network</span>
+          <img alt="Octocat-spinner-32" class="mini-loader" height="16" src="https://github.global.ssl.fastly.net/images/spinners/octocat-spinner-32.gif" width="16" />
+</a>      </li>
+    </ul>
+
+
+  </div>
+</div>
+
+            <div class="only-with-full-nav">
+              
+
+  
+
+<div class="clone-url "
+  data-protocol-type="http"
+  data-url="/users/set_protocol?protocol_selector=http&amp;protocol_type=push">
+  <h3><strong>HTTPS</strong> clone URL</h3>
+
+  <input type="text" class="clone js-url-field"
+         value="https://github.com/kunstler/data.format.workshop.git" readonly="readonly">
+
+  <span class="js-zeroclipboard url-box-clippy minibutton zeroclipboard-button" data-clipboard-text="https://github.com/kunstler/data.format.workshop.git" data-copied-hint="copied!" title="copy to clipboard"><span class="octicon octicon-clippy"></span></span>
+</div>
+
+  
+
+<div class="clone-url open"
+  data-protocol-type="ssh"
+  data-url="/users/set_protocol?protocol_selector=ssh&amp;protocol_type=push">
+  <h3><strong>SSH</strong> clone URL</h3>
+
+  <input type="text" class="clone js-url-field"
+         value="git@github.com:kunstler/data.format.workshop.git" readonly="readonly">
+
+  <span class="js-zeroclipboard url-box-clippy minibutton zeroclipboard-button" data-clipboard-text="git@github.com:kunstler/data.format.workshop.git" data-copied-hint="copied!" title="copy to clipboard"><span class="octicon octicon-clippy"></span></span>
+</div>
+
+  
+
+<div class="clone-url "
+  data-protocol-type="subversion"
+  data-url="/users/set_protocol?protocol_selector=subversion&amp;protocol_type=push">
+  <h3><strong>Subversion</strong> checkout URL</h3>
+
+  <input type="text" class="clone js-url-field"
+         value="https://github.com/kunstler/data.format.workshop" readonly="readonly">
+
+  <span class="js-zeroclipboard url-box-clippy minibutton zeroclipboard-button" data-clipboard-text="https://github.com/kunstler/data.format.workshop" data-copied-hint="copied!" title="copy to clipboard"><span class="octicon octicon-clippy"></span></span>
+</div>
+
+
+
+<p class="clone-options">You can clone with
+    <a href="#" class="js-clone-selector" data-protocol="http">HTTPS</a>,
+    <a href="#" class="js-clone-selector" data-protocol="ssh">SSH</a>,
+    <a href="#" class="js-clone-selector" data-protocol="subversion">Subversion</a>,
+  and <a href="https://help.github.com/articles/which-remote-url-should-i-use">other methods.</a>
+</p>
+
+  <a href="github-mac://openRepo/https://github.com/kunstler/data.format.workshop" class="minibutton sidebar-button">
+    <span class="octicon octicon-device-desktop"></span>
+    Clone in Desktop
+  </a>
+
+
+                <a href="/kunstler/data.format.workshop/archive/aa116602f68362615eaefb2781a283cff4b0bb8a.zip"
+                   class="minibutton sidebar-button"
+                   title="Download this repository as a zip file"
+                   rel="nofollow">
+                  <span class="octicon octicon-cloud-download"></span>
+                  Download ZIP
+                </a>
+            </div>
+        </div><!-- /.repository-sidebar -->
+
+        <div id="js-repo-pjax-container" class="repository-content context-loader-container" data-pjax-container>
+          
+
+
+<!-- blob contrib key: blob_contributors:v21:d66726fcbcff8c0ff2e3708ba2032a12 -->
+<!-- blob contrib frag key: views10/v8/blob_contributors:v21:d66726fcbcff8c0ff2e3708ba2032a12 -->
+
+<p title="This is a placeholder element" class="js-history-link-replace hidden"></p>
+
+<a href="/kunstler/data.format.workshop/find/aa116602f68362615eaefb2781a283cff4b0bb8a" data-pjax data-hotkey="t" style="display:none">Show File Finder</a>
+
+<div class="file-navigation">
+  
+
+
+<div class="select-menu js-menu-container js-select-menu" >
+  <span class="minibutton select-menu-button js-menu-target" data-hotkey="w"
+    data-master-branch="master"
+    data-ref="" role="button" aria-label="Switch branches or tags">
+    <span class="octicon octicon-git-branch"></span>
+    <i>tree:</i>
+    <span class="js-select-button">aa116602f6</span>
+  </span>
+
+  <div class="select-menu-modal-holder js-menu-content js-navigation-container" data-pjax>
+
+    <div class="select-menu-modal">
+      <div class="select-menu-header">
+        <span class="select-menu-title">Switch branches/tags</span>
+        <span class="octicon octicon-remove-close js-menu-close"></span>
+      </div> <!-- /.select-menu-header -->
+
+      <div class="select-menu-filters">
+        <div class="select-menu-text-filter">
+          <input type="text" aria-label="Find or create a branch…" id="context-commitish-filter-field" class="js-filterable-field js-navigation-enable" placeholder="Find or create a branch…">
+        </div>
+        <div class="select-menu-tabs">
+          <ul>
+            <li class="select-menu-tab">
+              <a href="#" data-tab-filter="branches" class="js-select-menu-tab">Branches</a>
+            </li>
+            <li class="select-menu-tab">
+              <a href="#" data-tab-filter="tags" class="js-select-menu-tab">Tags</a>
+            </li>
+          </ul>
+        </div><!-- /.select-menu-tabs -->
+      </div><!-- /.select-menu-filters -->
+
+      <div class="select-menu-list select-menu-tab-bucket js-select-menu-tab-bucket" data-tab-filter="branches">
+
+        <div data-filterable-for="context-commitish-filter-field" data-filterable-type="substring">
+
+
+            <div class="select-menu-item js-navigation-item ">
+              <span class="select-menu-item-icon octicon octicon-check"></span>
+              <a href="/kunstler/data.format.workshop/blob/master/R/format.function.R" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="master" data-skip-pjax="true" rel="nofollow" title="master">master</a>
+            </div> <!-- /.select-menu-item -->
+        </div>
+
+          <form accept-charset="UTF-8" action="/kunstler/data.format.workshop/branches" class="js-create-branch select-menu-item select-menu-new-item-form js-navigation-item js-new-item-form" method="post"><div style="margin:0;padding:0;display:inline"><input name="authenticity_token" type="hidden" value="IvSvLDPX7poD94qLS3z1dpVzB3Zg/hDxqhNAoXguQvk=" /></div>
+            <span class="octicon octicon-git-branch-create select-menu-item-icon"></span>
+            <div class="select-menu-item-text">
+              <h4>Create branch: <span class="js-new-item-name"></span></h4>
+              <span class="description">from ‘aa11660’</span>
+            </div>
+            <input type="hidden" name="name" id="name" class="js-new-item-value">
+            <input type="hidden" name="branch" id="branch" value="aa116602f68362615eaefb2781a283cff4b0bb8a" />
+            <input type="hidden" name="path" id="branch" value="R/format.function.R" />
+          </form> <!-- /.select-menu-item -->
+
+      </div> <!-- /.select-menu-list -->
+
+      <div class="select-menu-list select-menu-tab-bucket js-select-menu-tab-bucket" data-tab-filter="tags">
+        <div data-filterable-for="context-commitish-filter-field" data-filterable-type="substring">
+
+
+        </div>
+
+        <div class="select-menu-no-results">Nothing to show</div>
+      </div> <!-- /.select-menu-list -->
+
+    </div> <!-- /.select-menu-modal -->
+  </div> <!-- /.select-menu-modal-holder -->
+</div> <!-- /.select-menu -->
+
+  <div class="breadcrumb">
+    <span class='repo-root js-repo-root'><span itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="/kunstler/data.format.workshop/tree/aa116602f68362615eaefb2781a283cff4b0bb8a" data-branch="aa116602f68362615eaefb2781a283cff4b0bb8a" data-direction="back" data-pjax="true" itemscope="url" rel="nofollow"><span itemprop="title">data.format.workshop</span></a></span></span><span class="separator"> / </span><span itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="/kunstler/data.format.workshop/tree/aa116602f68362615eaefb2781a283cff4b0bb8a/R" data-branch="aa116602f68362615eaefb2781a283cff4b0bb8a" data-direction="back" data-pjax="true" itemscope="url" rel="nofollow"><span itemprop="title">R</span></a></span><span class="separator"> / </span><strong class="final-path">format.function.R</strong> <span class="js-zeroclipboard minibutton zeroclipboard-button" data-clipboard-text="R/format.function.R" data-copied-hint="copied!" title="copy to clipboard"><span class="octicon octicon-clippy"></span></span>
+  </div>
+</div>
+
+
+  <div class="commit commit-loader file-history-tease js-deferred-content" data-url="/kunstler/data.format.workshop/contributors/aa116602f68362615eaefb2781a283cff4b0bb8a/R/format.function.R">
+    Fetching contributors…
+
+    <div class="participation">
+      <p class="loader-loading"><img alt="Octocat-spinner-32-eaf2f5" height="16" src="https://github.global.ssl.fastly.net/images/spinners/octocat-spinner-32-EAF2F5.gif" width="16" /></p>
+      <p class="loader-error">Cannot retrieve contributors at this time</p>
+    </div>
+  </div>
+
+<div id="files" class="bubble">
+  <div class="file">
+    <div class="meta">
+      <div class="info">
+        <span class="icon"><b class="octicon octicon-file-text"></b></span>
+        <span class="mode" title="File Mode">file</span>
+          <span>347 lines (300 sloc)</span>
+        <span>12.783 kb</span>
+      </div>
+      <div class="actions">
+        <div class="button-group">
+              <a class="minibutton disabled js-entice" href=""
+                 data-entice="You must be on a branch to make or propose changes to this file">Edit</a>
+          <a href="/kunstler/data.format.workshop/raw/aa116602f68362615eaefb2781a283cff4b0bb8a/R/format.function.R" class="button minibutton " id="raw-url">Raw</a>
+            <a href="/kunstler/data.format.workshop/blame/aa116602f68362615eaefb2781a283cff4b0bb8a/R/format.function.R" class="button minibutton ">Blame</a>
+          <a href="/kunstler/data.format.workshop/commits/aa116602f68362615eaefb2781a283cff4b0bb8a/R/format.function.R" class="button minibutton " rel="nofollow">History</a>
+        </div><!-- /.button-group -->
+            <a class="minibutton danger empty-icon js-entice" href=""
+               data-entice="You must be signed in and on a branch to make or propose changes">
+            Delete
+          </a>
+      </div><!-- /.actions -->
+
+    </div>
+        <div class="blob-wrapper data type-r js-blob-data">
+        <table class="file-code file-diff">
+          <tr class="file-code-line">
+            <td class="blob-line-nums">
+              <span id="L1" rel="#L1">1</span>
+<span id="L2" rel="#L2">2</span>
+<span id="L3" rel="#L3">3</span>
+<span id="L4" rel="#L4">4</span>
+<span id="L5" rel="#L5">5</span>
+<span id="L6" rel="#L6">6</span>
+<span id="L7" rel="#L7">7</span>
+<span id="L8" rel="#L8">8</span>
+<span id="L9" rel="#L9">9</span>
+<span id="L10" rel="#L10">10</span>
+<span id="L11" rel="#L11">11</span>
+<span id="L12" rel="#L12">12</span>
+<span id="L13" rel="#L13">13</span>
+<span id="L14" rel="#L14">14</span>
+<span id="L15" rel="#L15">15</span>
+<span id="L16" rel="#L16">16</span>
+<span id="L17" rel="#L17">17</span>
+<span id="L18" rel="#L18">18</span>
+<span id="L19" rel="#L19">19</span>
+<span id="L20" rel="#L20">20</span>
+<span id="L21" rel="#L21">21</span>
+<span id="L22" rel="#L22">22</span>
+<span id="L23" rel="#L23">23</span>
+<span id="L24" rel="#L24">24</span>
+<span id="L25" rel="#L25">25</span>
+<span id="L26" rel="#L26">26</span>
+<span id="L27" rel="#L27">27</span>
+<span id="L28" rel="#L28">28</span>
+<span id="L29" rel="#L29">29</span>
+<span id="L30" rel="#L30">30</span>
+<span id="L31" rel="#L31">31</span>
+<span id="L32" rel="#L32">32</span>
+<span id="L33" rel="#L33">33</span>
+<span id="L34" rel="#L34">34</span>
+<span id="L35" rel="#L35">35</span>
+<span id="L36" rel="#L36">36</span>
+<span id="L37" rel="#L37">37</span>
+<span id="L38" rel="#L38">38</span>
+<span id="L39" rel="#L39">39</span>
+<span id="L40" rel="#L40">40</span>
+<span id="L41" rel="#L41">41</span>
+<span id="L42" rel="#L42">42</span>
+<span id="L43" rel="#L43">43</span>
+<span id="L44" rel="#L44">44</span>
+<span id="L45" rel="#L45">45</span>
+<span id="L46" rel="#L46">46</span>
+<span id="L47" rel="#L47">47</span>
+<span id="L48" rel="#L48">48</span>
+<span id="L49" rel="#L49">49</span>
+<span id="L50" rel="#L50">50</span>
+<span id="L51" rel="#L51">51</span>
+<span id="L52" rel="#L52">52</span>
+<span id="L53" rel="#L53">53</span>
+<span id="L54" rel="#L54">54</span>
+<span id="L55" rel="#L55">55</span>
+<span id="L56" rel="#L56">56</span>
+<span id="L57" rel="#L57">57</span>
+<span id="L58" rel="#L58">58</span>
+<span id="L59" rel="#L59">59</span>
+<span id="L60" rel="#L60">60</span>
+<span id="L61" rel="#L61">61</span>
+<span id="L62" rel="#L62">62</span>
+<span id="L63" rel="#L63">63</span>
+<span id="L64" rel="#L64">64</span>
+<span id="L65" rel="#L65">65</span>
+<span id="L66" rel="#L66">66</span>
+<span id="L67" rel="#L67">67</span>
+<span id="L68" rel="#L68">68</span>
+<span id="L69" rel="#L69">69</span>
+<span id="L70" rel="#L70">70</span>
+<span id="L71" rel="#L71">71</span>
+<span id="L72" rel="#L72">72</span>
+<span id="L73" rel="#L73">73</span>
+<span id="L74" rel="#L74">74</span>
+<span id="L75" rel="#L75">75</span>
+<span id="L76" rel="#L76">76</span>
+<span id="L77" rel="#L77">77</span>
+<span id="L78" rel="#L78">78</span>
+<span id="L79" rel="#L79">79</span>
+<span id="L80" rel="#L80">80</span>
+<span id="L81" rel="#L81">81</span>
+<span id="L82" rel="#L82">82</span>
+<span id="L83" rel="#L83">83</span>
+<span id="L84" rel="#L84">84</span>
+<span id="L85" rel="#L85">85</span>
+<span id="L86" rel="#L86">86</span>
+<span id="L87" rel="#L87">87</span>
+<span id="L88" rel="#L88">88</span>
+<span id="L89" rel="#L89">89</span>
+<span id="L90" rel="#L90">90</span>
+<span id="L91" rel="#L91">91</span>
+<span id="L92" rel="#L92">92</span>
+<span id="L93" rel="#L93">93</span>
+<span id="L94" rel="#L94">94</span>
+<span id="L95" rel="#L95">95</span>
+<span id="L96" rel="#L96">96</span>
+<span id="L97" rel="#L97">97</span>
+<span id="L98" rel="#L98">98</span>
+<span id="L99" rel="#L99">99</span>
+<span id="L100" rel="#L100">100</span>
+<span id="L101" rel="#L101">101</span>
+<span id="L102" rel="#L102">102</span>
+<span id="L103" rel="#L103">103</span>
+<span id="L104" rel="#L104">104</span>
+<span id="L105" rel="#L105">105</span>
+<span id="L106" rel="#L106">106</span>
+<span id="L107" rel="#L107">107</span>
+<span id="L108" rel="#L108">108</span>
+<span id="L109" rel="#L109">109</span>
+<span id="L110" rel="#L110">110</span>
+<span id="L111" rel="#L111">111</span>
+<span id="L112" rel="#L112">112</span>
+<span id="L113" rel="#L113">113</span>
+<span id="L114" rel="#L114">114</span>
+<span id="L115" rel="#L115">115</span>
+<span id="L116" rel="#L116">116</span>
+<span id="L117" rel="#L117">117</span>
+<span id="L118" rel="#L118">118</span>
+<span id="L119" rel="#L119">119</span>
+<span id="L120" rel="#L120">120</span>
+<span id="L121" rel="#L121">121</span>
+<span id="L122" rel="#L122">122</span>
+<span id="L123" rel="#L123">123</span>
+<span id="L124" rel="#L124">124</span>
+<span id="L125" rel="#L125">125</span>
+<span id="L126" rel="#L126">126</span>
+<span id="L127" rel="#L127">127</span>
+<span id="L128" rel="#L128">128</span>
+<span id="L129" rel="#L129">129</span>
+<span id="L130" rel="#L130">130</span>
+<span id="L131" rel="#L131">131</span>
+<span id="L132" rel="#L132">132</span>
+<span id="L133" rel="#L133">133</span>
+<span id="L134" rel="#L134">134</span>
+<span id="L135" rel="#L135">135</span>
+<span id="L136" rel="#L136">136</span>
+<span id="L137" rel="#L137">137</span>
+<span id="L138" rel="#L138">138</span>
+<span id="L139" rel="#L139">139</span>
+<span id="L140" rel="#L140">140</span>
+<span id="L141" rel="#L141">141</span>
+<span id="L142" rel="#L142">142</span>
+<span id="L143" rel="#L143">143</span>
+<span id="L144" rel="#L144">144</span>
+<span id="L145" rel="#L145">145</span>
+<span id="L146" rel="#L146">146</span>
+<span id="L147" rel="#L147">147</span>
+<span id="L148" rel="#L148">148</span>
+<span id="L149" rel="#L149">149</span>
+<span id="L150" rel="#L150">150</span>
+<span id="L151" rel="#L151">151</span>
+<span id="L152" rel="#L152">152</span>
+<span id="L153" rel="#L153">153</span>
+<span id="L154" rel="#L154">154</span>
+<span id="L155" rel="#L155">155</span>
+<span id="L156" rel="#L156">156</span>
+<span id="L157" rel="#L157">157</span>
+<span id="L158" rel="#L158">158</span>
+<span id="L159" rel="#L159">159</span>
+<span id="L160" rel="#L160">160</span>
+<span id="L161" rel="#L161">161</span>
+<span id="L162" rel="#L162">162</span>
+<span id="L163" rel="#L163">163</span>
+<span id="L164" rel="#L164">164</span>
+<span id="L165" rel="#L165">165</span>
+<span id="L166" rel="#L166">166</span>
+<span id="L167" rel="#L167">167</span>
+<span id="L168" rel="#L168">168</span>
+<span id="L169" rel="#L169">169</span>
+<span id="L170" rel="#L170">170</span>
+<span id="L171" rel="#L171">171</span>
+<span id="L172" rel="#L172">172</span>
+<span id="L173" rel="#L173">173</span>
+<span id="L174" rel="#L174">174</span>
+<span id="L175" rel="#L175">175</span>
+<span id="L176" rel="#L176">176</span>
+<span id="L177" rel="#L177">177</span>
+<span id="L178" rel="#L178">178</span>
+<span id="L179" rel="#L179">179</span>
+<span id="L180" rel="#L180">180</span>
+<span id="L181" rel="#L181">181</span>
+<span id="L182" rel="#L182">182</span>
+<span id="L183" rel="#L183">183</span>
+<span id="L184" rel="#L184">184</span>
+<span id="L185" rel="#L185">185</span>
+<span id="L186" rel="#L186">186</span>
+<span id="L187" rel="#L187">187</span>
+<span id="L188" rel="#L188">188</span>
+<span id="L189" rel="#L189">189</span>
+<span id="L190" rel="#L190">190</span>
+<span id="L191" rel="#L191">191</span>
+<span id="L192" rel="#L192">192</span>
+<span id="L193" rel="#L193">193</span>
+<span id="L194" rel="#L194">194</span>
+<span id="L195" rel="#L195">195</span>
+<span id="L196" rel="#L196">196</span>
+<span id="L197" rel="#L197">197</span>
+<span id="L198" rel="#L198">198</span>
+<span id="L199" rel="#L199">199</span>
+<span id="L200" rel="#L200">200</span>
+<span id="L201" rel="#L201">201</span>
+<span id="L202" rel="#L202">202</span>
+<span id="L203" rel="#L203">203</span>
+<span id="L204" rel="#L204">204</span>
+<span id="L205" rel="#L205">205</span>
+<span id="L206" rel="#L206">206</span>
+<span id="L207" rel="#L207">207</span>
+<span id="L208" rel="#L208">208</span>
+<span id="L209" rel="#L209">209</span>
+<span id="L210" rel="#L210">210</span>
+<span id="L211" rel="#L211">211</span>
+<span id="L212" rel="#L212">212</span>
+<span id="L213" rel="#L213">213</span>
+<span id="L214" rel="#L214">214</span>
+<span id="L215" rel="#L215">215</span>
+<span id="L216" rel="#L216">216</span>
+<span id="L217" rel="#L217">217</span>
+<span id="L218" rel="#L218">218</span>
+<span id="L219" rel="#L219">219</span>
+<span id="L220" rel="#L220">220</span>
+<span id="L221" rel="#L221">221</span>
+<span id="L222" rel="#L222">222</span>
+<span id="L223" rel="#L223">223</span>
+<span id="L224" rel="#L224">224</span>
+<span id="L225" rel="#L225">225</span>
+<span id="L226" rel="#L226">226</span>
+<span id="L227" rel="#L227">227</span>
+<span id="L228" rel="#L228">228</span>
+<span id="L229" rel="#L229">229</span>
+<span id="L230" rel="#L230">230</span>
+<span id="L231" rel="#L231">231</span>
+<span id="L232" rel="#L232">232</span>
+<span id="L233" rel="#L233">233</span>
+<span id="L234" rel="#L234">234</span>
+<span id="L235" rel="#L235">235</span>
+<span id="L236" rel="#L236">236</span>
+<span id="L237" rel="#L237">237</span>
+<span id="L238" rel="#L238">238</span>
+<span id="L239" rel="#L239">239</span>
+<span id="L240" rel="#L240">240</span>
+<span id="L241" rel="#L241">241</span>
+<span id="L242" rel="#L242">242</span>
+<span id="L243" rel="#L243">243</span>
+<span id="L244" rel="#L244">244</span>
+<span id="L245" rel="#L245">245</span>
+<span id="L246" rel="#L246">246</span>
+<span id="L247" rel="#L247">247</span>
+<span id="L248" rel="#L248">248</span>
+<span id="L249" rel="#L249">249</span>
+<span id="L250" rel="#L250">250</span>
+<span id="L251" rel="#L251">251</span>
+<span id="L252" rel="#L252">252</span>
+<span id="L253" rel="#L253">253</span>
+<span id="L254" rel="#L254">254</span>
+<span id="L255" rel="#L255">255</span>
+<span id="L256" rel="#L256">256</span>
+<span id="L257" rel="#L257">257</span>
+<span id="L258" rel="#L258">258</span>
+<span id="L259" rel="#L259">259</span>
+<span id="L260" rel="#L260">260</span>
+<span id="L261" rel="#L261">261</span>
+<span id="L262" rel="#L262">262</span>
+<span id="L263" rel="#L263">263</span>
+<span id="L264" rel="#L264">264</span>
+<span id="L265" rel="#L265">265</span>
+<span id="L266" rel="#L266">266</span>
+<span id="L267" rel="#L267">267</span>
+<span id="L268" rel="#L268">268</span>
+<span id="L269" rel="#L269">269</span>
+<span id="L270" rel="#L270">270</span>
+<span id="L271" rel="#L271">271</span>
+<span id="L272" rel="#L272">272</span>
+<span id="L273" rel="#L273">273</span>
+<span id="L274" rel="#L274">274</span>
+<span id="L275" rel="#L275">275</span>
+<span id="L276" rel="#L276">276</span>
+<span id="L277" rel="#L277">277</span>
+<span id="L278" rel="#L278">278</span>
+<span id="L279" rel="#L279">279</span>
+<span id="L280" rel="#L280">280</span>
+<span id="L281" rel="#L281">281</span>
+<span id="L282" rel="#L282">282</span>
+<span id="L283" rel="#L283">283</span>
+<span id="L284" rel="#L284">284</span>
+<span id="L285" rel="#L285">285</span>
+<span id="L286" rel="#L286">286</span>
+<span id="L287" rel="#L287">287</span>
+<span id="L288" rel="#L288">288</span>
+<span id="L289" rel="#L289">289</span>
+<span id="L290" rel="#L290">290</span>
+<span id="L291" rel="#L291">291</span>
+<span id="L292" rel="#L292">292</span>
+<span id="L293" rel="#L293">293</span>
+<span id="L294" rel="#L294">294</span>
+<span id="L295" rel="#L295">295</span>
+<span id="L296" rel="#L296">296</span>
+<span id="L297" rel="#L297">297</span>
+<span id="L298" rel="#L298">298</span>
+<span id="L299" rel="#L299">299</span>
+<span id="L300" rel="#L300">300</span>
+<span id="L301" rel="#L301">301</span>
+<span id="L302" rel="#L302">302</span>
+<span id="L303" rel="#L303">303</span>
+<span id="L304" rel="#L304">304</span>
+<span id="L305" rel="#L305">305</span>
+<span id="L306" rel="#L306">306</span>
+<span id="L307" rel="#L307">307</span>
+<span id="L308" rel="#L308">308</span>
+<span id="L309" rel="#L309">309</span>
+<span id="L310" rel="#L310">310</span>
+<span id="L311" rel="#L311">311</span>
+<span id="L312" rel="#L312">312</span>
+<span id="L313" rel="#L313">313</span>
+<span id="L314" rel="#L314">314</span>
+<span id="L315" rel="#L315">315</span>
+<span id="L316" rel="#L316">316</span>
+<span id="L317" rel="#L317">317</span>
+<span id="L318" rel="#L318">318</span>
+<span id="L319" rel="#L319">319</span>
+<span id="L320" rel="#L320">320</span>
+<span id="L321" rel="#L321">321</span>
+<span id="L322" rel="#L322">322</span>
+<span id="L323" rel="#L323">323</span>
+<span id="L324" rel="#L324">324</span>
+<span id="L325" rel="#L325">325</span>
+<span id="L326" rel="#L326">326</span>
+<span id="L327" rel="#L327">327</span>
+<span id="L328" rel="#L328">328</span>
+<span id="L329" rel="#L329">329</span>
+<span id="L330" rel="#L330">330</span>
+<span id="L331" rel="#L331">331</span>
+<span id="L332" rel="#L332">332</span>
+<span id="L333" rel="#L333">333</span>
+<span id="L334" rel="#L334">334</span>
+<span id="L335" rel="#L335">335</span>
+<span id="L336" rel="#L336">336</span>
+<span id="L337" rel="#L337">337</span>
+<span id="L338" rel="#L338">338</span>
+<span id="L339" rel="#L339">339</span>
+<span id="L340" rel="#L340">340</span>
+<span id="L341" rel="#L341">341</span>
+<span id="L342" rel="#L342">342</span>
+<span id="L343" rel="#L343">343</span>
+<span id="L344" rel="#L344">344</span>
+<span id="L345" rel="#L345">345</span>
+<span id="L346" rel="#L346">346</span>
+
+            </td>
+            <td class="blob-line-code">
+                    <div class="highlight"><pre><div class='line' id='LC1'><br/></div><div class='line' id='LC2'><span class="c1">###################################################</span></div><div class='line' id='LC3'><span class="c1">###################################################</span></div><div class='line' id='LC4'><span class="c1">###################################################</span></div><div class='line' id='LC5'><span class="c1">##### FUNCTION TO FORMAT DATA FOR THE WORKSHOP ANALYSIS</span></div><div class='line' id='LC6'><br/></div><div class='line' id='LC7'><br/></div><div class='line' id='LC8'><span class="c1">######</span></div><div class='line' id='LC9'><span class="c1">######</span></div><div class='line' id='LC10'><span class="c1">## FUNCTION TO PLOT MAP OF TREE</span></div><div class='line' id='LC11'><span class="c1">##&#39; .. Function to plot map of tree with circle function of their dbh..</span></div><div class='line' id='LC12'><span class="c1">##&#39;</span></div><div class='line' id='LC13'><span class="c1">##&#39; .. content for \details{} ..</span></div><div class='line' id='LC14'><span class="c1">##&#39; @title </span></div><div class='line' id='LC15'><span class="c1">##&#39; @param plot.select the plot for which draw the map</span></div><div class='line' id='LC16'><span class="c1">##&#39; @param x </span></div><div class='line' id='LC17'><span class="c1">##&#39; @param y </span></div><div class='line' id='LC18'><span class="c1">##&#39; @param plot vectore of plot id for each tree</span></div><div class='line' id='LC19'><span class="c1">##&#39; @param D diameter in cm</span></div><div class='line' id='LC20'><span class="c1">##&#39; @param inches controling the circle size</span></div><div class='line' id='LC21'><span class="c1">##&#39; @param ... </span></div><div class='line' id='LC22'><span class="c1">##&#39; @return </span></div><div class='line' id='LC23'><span class="c1">##&#39; @author Kunstler</span></div><div class='line' id='LC24'>fun.circles.plot <span class="o">&lt;-</span> <span class="kr">function</span><span class="p">(</span>plot.select<span class="p">,</span>x<span class="p">,</span>y<span class="p">,</span>plot<span class="p">,</span>D<span class="p">,</span>inches<span class="p">,</span><span class="kc">...</span><span class="p">){</span></div><div class='line' id='LC25'>x.t <span class="o">&lt;-</span> x<span class="p">[</span>plot<span class="o">==</span>plot.select<span class="p">]</span></div><div class='line' id='LC26'>y.t <span class="o">&lt;-</span> y<span class="p">[</span>plot<span class="o">==</span>plot.select<span class="p">]</span></div><div class='line' id='LC27'>D.t <span class="o">&lt;-</span> D<span class="p">[</span>plot<span class="o">==</span>plot.select<span class="p">]</span></div><div class='line' id='LC28'>D.t<span class="p">[</span>is.na<span class="p">(</span>D.t<span class="p">)]</span> <span class="o">&lt;-</span>  <span class="m">0</span></div><div class='line' id='LC29'>symbols<span class="p">(</span>x.t<span class="p">,</span>y.t<span class="p">,</span>circles<span class="o">=</span>D.t <span class="p">,</span>main<span class="o">=</span>plot.select<span class="p">,</span>inches<span class="o">=</span>inches<span class="p">,</span><span class="kc">...</span><span class="p">)</span></div><div class='line' id='LC30'><span class="p">}</span></div><div class='line' id='LC31'><br/></div><div class='line' id='LC32'><br/></div><div class='line' id='LC33'><br/></div><div class='line' id='LC34'><span class="c1">#########################</span></div><div class='line' id='LC35'><span class="c1">## </span></div><div class='line' id='LC36'><span class="c1">##&#39; .. Compute the basal area of competitor in a plot..</span></div><div class='line' id='LC37'><span class="c1">##&#39;</span></div><div class='line' id='LC38'><span class="c1">##&#39; .. content for \details{} ..</span></div><div class='line' id='LC39'><span class="c1">##&#39; @title </span></div><div class='line' id='LC40'><span class="c1">##&#39; @param diam diameters of each individuals in cm</span></div><div class='line' id='LC41'><span class="c1">##&#39; @param weights weight to compute the basal area in cm^2/m^2</span></div><div class='line' id='LC42'><span class="c1">##&#39; @return basal area in cm^2/m^2 </span></div><div class='line' id='LC43'><span class="c1">##&#39; @author Kunstler</span></div><div class='line' id='LC44'>BA.fun <span class="o">&lt;-</span> <span class="kr">function</span><span class="p">(</span>diam<span class="p">,</span>weights<span class="p">){</span></div><div class='line' id='LC45'><span class="p">((</span>diam<span class="o">/</span><span class="m">2</span><span class="p">)</span><span class="o">^</span><span class="m">2</span><span class="p">)</span><span class="o">*</span>pi<span class="o">*</span>weights</div><div class='line' id='LC46'><span class="p">}</span></div><div class='line' id='LC47'><br/></div><div class='line' id='LC48'><br/></div><div class='line' id='LC49'><br/></div><div class='line' id='LC50'><br/></div><div class='line' id='LC51'><span class="c1">#### </span></div><div class='line' id='LC52'><span class="c1">##&#39; .. function to compute the basal area of neighborood tree in plots ..</span></div><div class='line' id='LC53'><span class="c1">##&#39;</span></div><div class='line' id='LC54'><span class="c1">##&#39; .. content for \details{} ..</span></div><div class='line' id='LC55'><span class="c1">##&#39; @title </span></div><div class='line' id='LC56'><span class="c1">##&#39; @param obs.id tree obs identifier</span></div><div class='line' id='LC57'><span class="c1">##&#39; @param diam diam of tree in cm</span></div><div class='line' id='LC58'><span class="c1">##&#39; @param sp species name or code</span></div><div class='line' id='LC59'><span class="c1">##&#39; @param id.plot identifier of the plot</span></div><div class='line' id='LC60'><span class="c1">##&#39; @param weights weights to compute basal area in cm^2/m^2 SO THE 1/AREA of teh plot (or subplot) with area in m^2</span></div><div class='line' id='LC61'><span class="c1">##&#39; @param weights.full.plot weights for the whole plot to compute basal area in cm^2/m^2 or if NA use weights of the individuals (for simple plots)</span></div><div class='line' id='LC62'><span class="c1">##&#39; @return data frame with obs.id and one column per species with basal area of the species (without the target tree)</span></div><div class='line' id='LC63'><span class="c1">##&#39; @author Kunstler</span></div><div class='line' id='LC64'>BA.SP.FUN <span class="o">&lt;-</span>  <span class="kr">function</span><span class="p">(</span>obs.id<span class="p">,</span>diam<span class="p">,</span>sp<span class="p">,</span>id.plot<span class="p">,</span>weights<span class="p">,</span>weight.full.plot<span class="p">){</span></div><div class='line' id='LC65'>require<span class="p">(</span>data.table<span class="p">)</span></div><div class='line' id='LC66'>id.plot <span class="o">&lt;-</span> as.character<span class="p">(</span>id.plot<span class="p">)</span></div><div class='line' id='LC67'>obs.id <span class="o">&lt;-</span>  as.character<span class="p">(</span>obs.id<span class="p">)</span></div><div class='line' id='LC68'><span class="c1">## check equal length</span></div><div class='line' id='LC69'><span class="kr">if</span><span class="p">(</span><span class="o">!</span><span class="p">(</span>length<span class="p">(</span>obs.id<span class="p">)</span><span class="o">==</span>length<span class="p">(</span>diam<span class="p">)</span> <span class="o">&amp;</span> length<span class="p">(</span>obs.id<span class="p">)</span><span class="o">==</span>length<span class="p">(</span>sp<span class="p">)</span> <span class="o">&amp;</span> length<span class="p">(</span>obs.id<span class="p">)</span><span class="o">==</span>length<span class="p">(</span>id.plot<span class="p">)</span> <span class="o">&amp;</span> length<span class="p">(</span>obs.id<span class="p">)</span><span class="o">==</span>length<span class="p">(</span>weights<span class="p">)))</span></div><div class='line' id='LC70'>&nbsp;&nbsp;&nbsp;&nbsp;stop<span class="p">(</span><span class="s">&quot;length of obs.id diam,sp id.plot &amp; weights need to be the same&quot;</span><span class="p">)</span></div><div class='line' id='LC71'><br/></div><div class='line' id='LC72'><span class="c1">## check sp is not numeric</span></div><div class='line' id='LC73'><span class="kr">if</span><span class="p">(</span>is.numeric<span class="p">(</span>sp<span class="p">))</span> stop<span class="p">(</span><span class="s">&quot;sp can not be numeric need to be charatcer do paste(&#39;sp&#39;,sp,sep=&#39;.&#39;)&quot;</span><span class="p">)</span></div><div class='line' id='LC74'><br/></div><div class='line' id='LC75'><span class="c1"># compute BA tot per species per plot</span></div><div class='line' id='LC76'>BASP <span class="o">&lt;-</span> tapply<span class="p">(</span>BA.fun<span class="p">(</span>diam<span class="p">,</span>weights<span class="p">),</span>INDEX<span class="o">=</span>list<span class="p">(</span>id.plot<span class="p">,</span>sp<span class="p">),</span>FUN<span class="o">=</span>sum<span class="p">,</span>na.rm<span class="o">=</span><span class="k-Variable">T</span><span class="p">)</span></div><div class='line' id='LC77'>print<span class="p">(</span>dim<span class="p">(</span>BASP<span class="p">))</span></div><div class='line' id='LC78'>DATA.BASP <span class="o">&lt;-</span>  data.table<span class="p">(</span>id.plot<span class="o">=</span> rownames<span class="p">(</span>BASP<span class="p">),</span>BASP<span class="p">)</span></div><div class='line' id='LC79'>setnames<span class="p">(</span> DATA.BASP<span class="p">,</span>old<span class="o">=</span><span class="m">1</span><span class="o">:</span>ncol<span class="p">(</span>DATA.BASP<span class="p">),</span> c<span class="p">(</span><span class="s">&quot;id.plot&quot;</span><span class="p">,</span>colnames<span class="p">(</span>BASP<span class="p">)))</span></div><div class='line' id='LC80'>setkeyv<span class="p">(</span>DATA.BASP<span class="p">,</span>c<span class="p">(</span><span class="s">&quot;id.plot&quot;</span><span class="p">))</span></div><div class='line' id='LC81'>sp.name <span class="o">&lt;-</span> colnames<span class="p">(</span>BASP<span class="p">)</span></div><div class='line' id='LC82'>rm<span class="p">(</span>BASP<span class="p">)</span></div><div class='line' id='LC83'>print<span class="p">(</span><span class="s">&quot;first table created&quot;</span><span class="p">)</span></div><div class='line' id='LC84'><span class="c1">#### MERGE with indivudal tree</span></div><div class='line' id='LC85'><span class="c1">## use library(data.table)</span></div><div class='line' id='LC86'><span class="kr">if</span><span class="p">(</span><span class="o">!</span>is.na<span class="p">(</span>weight.full.plot<span class="p">)){</span></div><div class='line' id='LC87'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data.indiv <span class="o">&lt;-</span> data.table<span class="p">(</span>obs.id<span class="o">=</span>obs.id<span class="p">,</span>sp<span class="o">=</span>sp<span class="p">,</span></div><div class='line' id='LC88'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id.plot<span class="o">=</span>id.plot<span class="p">,</span>diam<span class="o">=</span>diam<span class="p">,</span></div><div class='line' id='LC89'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BA.indiv<span class="o">=</span>BA.fun<span class="p">(</span>diam<span class="p">,</span>rep<span class="p">(</span>weight.full.plot<span class="p">,</span>length<span class="p">(</span>diam<span class="p">))))</span></div><div class='line' id='LC90'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setkeyv<span class="p">(</span>data.indiv<span class="p">,</span><span class="s">&quot;id.plot&quot;</span><span class="p">)</span></div><div class='line' id='LC91'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print<span class="p">(</span><span class="s">&quot;second table created&quot;</span><span class="p">)</span></div><div class='line' id='LC92'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data.merge <span class="o">&lt;-</span>  merge<span class="p">(</span>data.indiv<span class="p">,</span>DATA.BASP<span class="p">)</span></div><div class='line' id='LC93'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print<span class="p">(</span><span class="s">&quot;merge done&quot;</span><span class="p">)</span></div><div class='line' id='LC94'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1"># substract target BA</span></div><div class='line' id='LC95'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kr">for</span> <span class="p">(</span>i <span class="kr">in</span> <span class="p">(</span>sp.name<span class="p">)){</span></div><div class='line' id='LC96'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eval<span class="p">(</span>parse<span class="p">(</span>text<span class="o">=</span>paste<span class="p">(</span><span class="s">&quot;data.merge[sp==\&#39;&quot;</span><span class="p">,</span>i<span class="p">,</span><span class="s">&quot;\&#39;,&quot;</span><span class="p">,</span>i<span class="p">,</span><span class="s">&quot;:=&quot;</span><span class="p">,</span>i<span class="p">,</span><span class="s">&quot;-BA.indiv]&quot;</span><span class="p">,</span>sep<span class="o">=</span><span class="s">&quot;&quot;</span><span class="p">)))</span></div><div class='line' id='LC97'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC98'><br/></div><div class='line' id='LC99'><span class="p">}</span><span class="kr">else</span><span class="p">{</span></div><div class='line' id='LC100'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data.indiv <span class="o">&lt;-</span> data.table<span class="p">(</span>obs.id<span class="o">=</span>obs.id<span class="p">,</span>sp<span class="o">=</span>sp<span class="p">,</span>id.plot<span class="o">=</span>id.plot<span class="p">,</span></div><div class='line' id='LC101'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;diam<span class="o">=</span>diam<span class="p">,</span>weights<span class="o">=</span>weights<span class="p">,</span></div><div class='line' id='LC102'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BA.indiv<span class="o">=</span>BA.fun<span class="p">(</span>diam<span class="p">,</span>weights<span class="p">))</span></div><div class='line' id='LC103'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setkeyv<span class="p">(</span>data.indiv<span class="p">,</span><span class="s">&quot;id.plot&quot;</span><span class="p">)</span></div><div class='line' id='LC104'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print<span class="p">(</span><span class="s">&quot;second table created&quot;</span><span class="p">)</span></div><div class='line' id='LC105'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data.merge <span class="o">&lt;-</span>  merge<span class="p">(</span>data.indiv<span class="p">,</span>DATA.BASP<span class="p">)</span></div><div class='line' id='LC106'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print<span class="p">(</span><span class="s">&quot;merge done&quot;</span><span class="p">)</span></div><div class='line' id='LC107'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kr">for</span> <span class="p">(</span>i <span class="kr">in</span> <span class="p">(</span>sp.name<span class="p">)){</span></div><div class='line' id='LC108'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eval<span class="p">(</span>parse<span class="p">(</span>text<span class="o">=</span>paste<span class="p">(</span><span class="s">&quot;data.merge[sp==\&#39;&quot;</span><span class="p">,</span>i<span class="p">,</span><span class="s">&quot;\&#39;,&quot;</span><span class="p">,</span>i<span class="p">,</span><span class="s">&quot;:=&quot;</span><span class="p">,</span>i<span class="p">,</span><span class="s">&quot;-BA.indiv]&quot;</span><span class="p">,</span>sep<span class="o">=</span><span class="s">&quot;&quot;</span><span class="p">)))</span></div><div class='line' id='LC109'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC110'><span class="p">}</span></div><div class='line' id='LC111'>print<span class="p">(</span><span class="s">&quot;replacment done&quot;</span><span class="p">)</span></div><div class='line' id='LC112'>data.merge<span class="p">[,</span>BA.indiv<span class="o">:=</span><span class="kc">NULL</span><span class="p">]</span></div><div class='line' id='LC113'>print<span class="p">(</span><span class="s">&quot;first column removed&quot;</span><span class="p">)</span></div><div class='line' id='LC114'><span class="c1">#### delete column not used</span></div><div class='line' id='LC115'>data.merge<span class="p">[,</span>sp<span class="o">:=</span><span class="kc">NULL</span><span class="p">]</span></div><div class='line' id='LC116'>data.merge<span class="p">[,</span>diam<span class="o">:=</span><span class="kc">NULL</span><span class="p">]</span></div><div class='line' id='LC117'>data.merge<span class="p">[,</span>id.plot<span class="o">:=</span><span class="kc">NULL</span><span class="p">]</span></div><div class='line' id='LC118'>data.merge<span class="p">[,</span>weights<span class="o">:=</span><span class="kc">NULL</span><span class="p">]</span></div><div class='line' id='LC119'>print<span class="p">(</span><span class="s">&quot;columns removed&quot;</span><span class="p">)</span></div><div class='line' id='LC120'><span class="kr">return</span><span class="p">(</span> <span class="p">(</span>data.merge<span class="p">))</span></div><div class='line' id='LC121'><span class="p">}</span></div><div class='line' id='LC122'><br/></div><div class='line' id='LC123'><span class="c1">######################</span></div><div class='line' id='LC124'><span class="c1">#### apply BA.SP.FUN per census</span></div><div class='line' id='LC125'><span class="c1"># function to run on a subset to only one census </span></div><div class='line' id='LC126'>BA.SP.FUN.l<span class="o">&lt;-</span>  <span class="kr">function</span><span class="p">(</span>census.id<span class="p">,</span>census<span class="p">,</span>obs.id<span class="p">,</span>diam<span class="p">,</span>sp<span class="p">,</span>id.plot<span class="p">,</span>weights<span class="p">,</span>weight.full.plot<span class="p">){</span></div><div class='line' id='LC127'><span class="kr">return</span><span class="p">(</span>BA.SP.FUN<span class="p">(</span>obs.id<span class="o">=</span>obs.id<span class="p">[</span>census<span class="o">==</span>census.id<span class="p">],</span>diam<span class="o">=</span>diam<span class="p">[</span>census<span class="o">==</span>census.id<span class="p">],</span>sp<span class="o">=</span>sp<span class="p">[</span>census<span class="o">==</span>census.id<span class="p">],</span>id.plot<span class="o">=</span>id.plot<span class="p">[</span>census<span class="o">==</span>census.id<span class="p">],</span>weights<span class="o">=</span>weights<span class="p">[</span>census<span class="o">==</span>census.id<span class="p">],</span>weight.full.plot<span class="o">=</span>weight.full.plot<span class="p">))</span></div><div class='line' id='LC128'><span class="p">}</span></div><div class='line' id='LC129'><span class="c1">## function to apply over all census and merge back together</span></div><div class='line' id='LC130'>BA.SP.FUN.census<span class="o">&lt;-</span>  <span class="kr">function</span><span class="p">(</span>census<span class="p">,</span>obs.id<span class="p">,</span>diam<span class="p">,</span>sp<span class="p">,</span>id.plot<span class="p">,</span>weights<span class="p">,</span>weight.full.plot<span class="p">){</span></div><div class='line' id='LC131'>require<span class="p">(</span>data.table<span class="p">)</span></div><div class='line' id='LC132'>unique.census <span class="o">&lt;-</span> unique<span class="p">(</span>census<span class="p">)</span></div><div class='line' id='LC133'>res.list <span class="o">&lt;-</span> lapply<span class="p">(</span>unique.census<span class="p">,</span>FUN<span class="o">=</span>BA.SP.FUN.l<span class="p">,</span>census<span class="p">,</span>obs.id<span class="p">,</span>diam<span class="p">,</span>sp<span class="p">,</span>id.plot<span class="p">,</span>weights<span class="p">,</span>weight.full.plot<span class="p">)</span></div><div class='line' id='LC134'>res.mat <span class="o">&lt;-</span> rbind.fill<span class="p">(</span>res.list <span class="p">)</span></div><div class='line' id='LC135'>res.mat <span class="o">&lt;-</span> data.table<span class="p">(</span>res.mat<span class="p">[</span>match<span class="p">(</span>obs.id<span class="p">,</span>res.mat<span class="p">[,</span><span class="s">&quot;obs.id&quot;</span><span class="p">]),])</span></div><div class='line' id='LC136'><span class="kr">return</span><span class="p">(</span>res.mat<span class="p">)</span></div><div class='line' id='LC137'><span class="p">}</span></div><div class='line' id='LC138'><br/></div><div class='line' id='LC139'><br/></div><div class='line' id='LC140'><span class="c1">#### </span></div><div class='line' id='LC141'><span class="c1">##&#39; .. function compute competition index with X Y coordinates based on a neighborhood of radius R ..</span></div><div class='line' id='LC142'><span class="c1">##&#39;</span></div><div class='line' id='LC143'><span class="c1">##&#39; .. content for \details{} ..</span></div><div class='line' id='LC144'><span class="c1">##&#39; @title </span></div><div class='line' id='LC145'><span class="c1">##&#39; @param obs.id id of the observation (if one tree as multiple growth measurement one obs.id per measurment</span></div><div class='line' id='LC146'><span class="c1">##&#39; @param xy.table table with x.y of teh individual</span></div><div class='line' id='LC147'><span class="c1">##&#39; @param diam diam in cm</span></div><div class='line' id='LC148'><span class="c1">##&#39; @param sp species</span></div><div class='line' id='LC149'><span class="c1">##&#39; @param Rlim radius of neighborhood search</span></div><div class='line' id='LC150'><span class="c1">##&#39; @param parallel run in paralle or not ?</span></div><div class='line' id='LC151'><span class="c1">##&#39; @param rpuDist run with GPU distance computation</span></div><div class='line' id='LC152'><span class="c1">##&#39; @return a data frame with nrow = length of obs.id and ncol =unique(sp)</span></div><div class='line' id='LC153'><span class="c1">##&#39; @author Kunstler</span></div><div class='line' id='LC154'>BA.SP.FUN.XY <span class="o">&lt;-</span>  <span class="kr">function</span><span class="p">(</span>obs.id<span class="p">,</span>xy.table<span class="p">,</span>diam<span class="p">,</span>sp<span class="p">,</span>Rlim<span class="p">,</span>parallel<span class="o">=</span><span class="kc">FALSE</span><span class="p">,</span>rpuDist<span class="o">=</span><span class="kc">FALSE</span><span class="p">){</span></div><div class='line' id='LC155'>rownames<span class="p">(</span>xy.table<span class="p">)</span> <span class="o">&lt;-</span> obs.id</div><div class='line' id='LC156'><span class="kr">if</span><span class="p">(</span>rpuDist<span class="p">){</span></div><div class='line' id='LC157'>&nbsp;&nbsp;require<span class="p">(</span>rpud<span class="p">)</span></div><div class='line' id='LC158'>&nbsp;&nbsp;dist.mat <span class="o">&lt;-</span> rpuDist<span class="p">(</span>xy.table<span class="p">,</span>upper<span class="o">=</span><span class="kc">TRUE</span><span class="p">,</span>diag<span class="o">=</span><span class="kc">TRUE</span><span class="p">)</span></div><div class='line' id='LC159'><span class="p">}</span><span class="kr">else</span><span class="p">{</span></div><div class='line' id='LC160'>&nbsp;&nbsp;dist.mat <span class="o">&lt;-</span> as.matrix<span class="p">(</span>dist<span class="p">(</span>xy.table<span class="p">,</span>upper<span class="o">=</span><span class="kc">TRUE</span><span class="p">,</span>diag<span class="o">=</span><span class="kc">TRUE</span><span class="p">))</span></div><div class='line' id='LC161'><span class="p">}</span></div><div class='line' id='LC162'>print<span class="p">(</span><span class="s">&#39;distance matrix computed&#39;</span><span class="p">)</span></div><div class='line' id='LC163'>dist.mat<span class="p">[</span>dist.mat <span class="o">&lt;</span>Rlim<span class="p">]</span> <span class="o">&lt;-</span> <span class="m">1</span></div><div class='line' id='LC164'>dist.mat<span class="p">[</span>dist.mat <span class="o">&gt;</span>Rlim<span class="p">]</span> <span class="o">&lt;-</span> <span class="m">0</span></div><div class='line' id='LC165'>diag<span class="p">(</span>dist.mat<span class="p">)</span> <span class="o">&lt;-</span> <span class="m">0</span></div><div class='line' id='LC166'>print<span class="p">(</span><span class="s">&#39;distance matrix set to 0 1&#39;</span><span class="p">)</span></div><div class='line' id='LC167'>BA <span class="o">&lt;-</span> BA.fun<span class="p">(</span>diam<span class="p">,</span>weights<span class="o">=</span><span class="m">1</span><span class="o">/</span><span class="p">(</span>pi<span class="o">*</span>Rlim<span class="o">^</span><span class="m">2</span><span class="p">))</span></div><div class='line' id='LC168'>BA.mat <span class="o">&lt;-</span> matrix<span class="p">(</span>rep<span class="p">(</span>BA<span class="p">,</span>length<span class="p">(</span>BA<span class="p">)),</span>nrow<span class="o">=</span>length<span class="p">(</span>BA<span class="p">),</span>byrow<span class="o">=</span><span class="kc">TRUE</span><span class="p">)</span></div><div class='line' id='LC169'>print<span class="p">(</span><span class="s">&#39;starting tapply over species&#39;</span><span class="p">)</span></div><div class='line' id='LC170'>fun.sum.sp <span class="o">&lt;-</span> <span class="kr">function</span><span class="p">(</span>x<span class="p">,</span>sp<span class="p">)</span> tapply<span class="p">(</span>x<span class="p">,</span>INDEX<span class="o">=</span>sp<span class="p">,</span>FUN<span class="o">=</span>sum<span class="p">,</span>na.rm<span class="o">=</span><span class="kc">TRUE</span><span class="p">)</span></div><div class='line' id='LC171'>&nbsp;&nbsp;<span class="kr">if</span><span class="p">(</span>parallel<span class="p">){</span></div><div class='line' id='LC172'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">## parallel version</span></div><div class='line' id='LC173'>&nbsp;&nbsp;&nbsp;&nbsp;require<span class="p">(</span>doParallel<span class="p">)</span></div><div class='line' id='LC174'>&nbsp;&nbsp;&nbsp;&nbsp;registerDoParallel<span class="p">(</span>cores<span class="o">=</span><span class="m">4</span><span class="p">)</span></div><div class='line' id='LC175'>&nbsp;&nbsp;&nbsp;&nbsp;mat <span class="o">&lt;-</span> dist.mat<span class="o">*</span>BA.mat</div><div class='line' id='LC176'>&nbsp;&nbsp;&nbsp;&nbsp;res.temp <span class="o">&lt;-</span> foreach<span class="p">(</span>i<span class="o">=</span><span class="m">1</span><span class="o">:</span>nrow<span class="p">(</span>mat<span class="p">),</span> .combine<span class="o">=</span>rbind<span class="p">)</span> <span class="o">%dopar%</span> <span class="p">{</span></div><div class='line' id='LC177'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fun.sum.sp<span class="p">(</span>mat<span class="p">[</span>i<span class="p">,],</span>sp<span class="p">)</span></div><div class='line' id='LC178'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC179'>&nbsp;&nbsp;&nbsp;&nbsp;rownames<span class="p">(</span>res.temp<span class="p">)</span> <span class="o">&lt;-</span> obs.id</div><div class='line' id='LC180'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kr">return</span><span class="p">((</span>res.temp<span class="p">))</span></div><div class='line' id='LC181'>&nbsp;&nbsp;<span class="p">}</span><span class="kr">else</span><span class="p">{</span></div><div class='line' id='LC182'>&nbsp;&nbsp;&nbsp;&nbsp;res.temp <span class="o">&lt;-</span>  t<span class="p">(</span>apply<span class="p">(</span>dist.mat<span class="o">*</span>BA.mat<span class="p">,</span>MARGIN<span class="o">=</span><span class="m">1</span><span class="p">,</span>FUN<span class="o">=</span>fun.sum.sp <span class="p">,</span>sp<span class="p">))</span></div><div class='line' id='LC183'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kr">return</span><span class="p">(</span>res.temp<span class="p">)</span></div><div class='line' id='LC184'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC185'><span class="p">}</span></div><div class='line' id='LC186'><br/></div><div class='line' id='LC187'><span class="c1">## function for lapply per census</span></div><div class='line' id='LC188'>BA.SP.FUN.XY.l <span class="o">&lt;-</span>  <span class="kr">function</span><span class="p">(</span>census.id<span class="p">,</span>census<span class="p">,</span>obs.id<span class="p">,</span>xy.table<span class="p">,</span>diam<span class="p">,</span>sp<span class="p">,</span>Rlim<span class="p">,</span>parallel<span class="o">=</span><span class="kc">FALSE</span><span class="p">,</span>rpuDist<span class="o">=</span><span class="kc">FALSE</span><span class="p">){</span></div><div class='line' id='LC189'><br/></div><div class='line' id='LC190'><span class="kr">return</span><span class="p">(</span>BA.SP.FUN.XY<span class="p">(</span>obs.id<span class="p">[</span>census<span class="o">==</span>census.id<span class="p">],</span>xy.table<span class="p">[</span>census<span class="o">==</span>census.id<span class="p">,],</span>diam<span class="p">[</span>census<span class="o">==</span>census.id<span class="p">],</span>sp<span class="p">[</span>census<span class="o">==</span>census.id<span class="p">],</span>Rlim<span class="p">,</span>parallel<span class="p">,</span>rpuDist<span class="p">))</span></div><div class='line' id='LC191'><br/></div><div class='line' id='LC192'><span class="p">}</span></div><div class='line' id='LC193'><br/></div><div class='line' id='LC194'><span class="c1">### wrapping function to run BA.SP.FUN.XY per census</span></div><div class='line' id='LC195'>BA.SP.FUN.XY.census <span class="o">&lt;-</span>  <span class="kr">function</span><span class="p">(</span>census<span class="p">,</span>obs.id<span class="p">,</span>xy.table<span class="p">,</span>diam<span class="p">,</span>sp<span class="p">,</span>Rlim<span class="p">,</span>parallel<span class="o">=</span><span class="kc">FALSE</span><span class="p">,</span>rpuDist<span class="o">=</span><span class="kc">FALSE</span><span class="p">){</span></div><div class='line' id='LC196'>unique.census <span class="o">&lt;-</span> unique<span class="p">(</span>census<span class="p">)</span></div><div class='line' id='LC197'>res.list <span class="o">&lt;-</span> lapply<span class="p">(</span>unique.census<span class="p">,</span>FUN<span class="o">=</span>BA.SP.FUN.XY.l<span class="p">,</span>obs.id<span class="p">,</span>xy.table<span class="p">,</span>diam<span class="p">,</span>sp<span class="p">,</span>Rlim<span class="p">,</span>parallel<span class="p">,</span>rpuDist<span class="p">)</span></div><div class='line' id='LC198'>res.mat <span class="o">&lt;-</span> rbind.fill<span class="p">(</span>res.list <span class="p">)</span></div><div class='line' id='LC199'>res.mat <span class="o">&lt;-</span> res.mat<span class="p">[</span>match<span class="p">(</span>obs.id<span class="p">,</span>rownames<span class="p">(</span>res.mat<span class="p">)),]</span></div><div class='line' id='LC200'><span class="kr">return</span><span class="p">(</span>res.mat<span class="p">)</span></div><div class='line' id='LC201'><span class="p">}</span></div><div class='line' id='LC202'><br/></div><div class='line' id='LC203'><span class="c1">############################</span></div><div class='line' id='LC204'><span class="c1">## FUNCTION remove trailing white space</span></div><div class='line' id='LC205'>trim.trailing <span class="o">&lt;-</span> <span class="kr">function</span> <span class="p">(</span>x<span class="p">)</span> sub<span class="p">(</span><span class="s">&quot;\\s+$&quot;</span><span class="p">,</span> <span class="s">&quot;&quot;</span><span class="p">,</span> x<span class="p">)</span></div><div class='line' id='LC206'><br/></div><div class='line' id='LC207'><span class="c1">## clean species.tab</span></div><div class='line' id='LC208'>fun.clean.species.tab <span class="o">&lt;-</span> <span class="kr">function</span><span class="p">(</span>species.tab<span class="p">){</span></div><div class='line' id='LC209'>species.tab2 <span class="o">&lt;-</span> species.tab<span class="p">[</span><span class="o">!</span>is.na<span class="p">(</span>species.tab<span class="o">$</span>Latin_name<span class="p">),]</span></div><div class='line' id='LC210'>&nbsp;</div><div class='line' id='LC211'><span class="c1">### species IFN reformat names</span></div><div class='line' id='LC212'><span class="c1">## clean species names and synonyme names</span></div><div class='line' id='LC213'>species.tab2<span class="o">$</span>Latin_name <span class="o">&lt;-</span> <span class="p">(</span>gsub<span class="p">(</span><span class="s">&quot;_&quot;</span><span class="p">,</span> <span class="s">&quot; &quot;</span><span class="p">,</span> species.tab2<span class="o">$</span>Latin_name<span class="p">))</span></div><div class='line' id='LC214'>species.tab2<span class="o">$</span>Latin_name_syn<span class="o">&lt;-</span> <span class="p">(</span>gsub<span class="p">(</span><span class="s">&quot;_&quot;</span><span class="p">,</span> <span class="s">&quot; &quot;</span><span class="p">,</span> species.tab2<span class="o">$</span>Latin_name_syn<span class="p">))</span></div><div class='line' id='LC215'><span class="c1">## remove trailing white space</span></div><div class='line' id='LC216'>species.tab2<span class="o">$</span>Latin_name_syn<span class="o">&lt;-</span> trim.trailing<span class="p">(</span>species.tab2<span class="o">$</span>Latin_name_syn<span class="p">)</span></div><div class='line' id='LC217'><br/></div><div class='line' id='LC218'>species.clean <span class="o">&lt;-</span> species.tab2<span class="p">[</span><span class="o">!</span>duplicated<span class="p">(</span>species.tab2<span class="o">$</span>Latin_name<span class="p">),</span></div><div class='line' id='LC219'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c<span class="p">(</span><span class="s">&quot;code&quot;</span><span class="p">,</span><span class="s">&quot;Latin_name&quot;</span><span class="p">,</span><span class="s">&quot;Exotic_Native_cultivated&quot;</span><span class="p">)]</span></div><div class='line' id='LC220'><span class="kr">return</span><span class="p">(</span>species.clean<span class="p">)}</span></div><div class='line' id='LC221'><br/></div><div class='line' id='LC222'><br/></div><div class='line' id='LC223'><span class="c1">### compute quantile 99% and sd with a bootstrap</span></div><div class='line' id='LC224'><br/></div><div class='line' id='LC225'>library<span class="p">(</span>boot<span class="p">)</span></div><div class='line' id='LC226'><br/></div><div class='line' id='LC227'>f.quantile <span class="o">&lt;-</span> <span class="kr">function</span> <span class="p">(</span>x<span class="p">,</span>ind<span class="p">,</span>probs<span class="p">){</span>quantile<span class="p">(</span>x<span class="p">[</span>ind<span class="p">],</span>probs<span class="o">=</span>probs<span class="p">,</span>na.rm<span class="o">=</span><span class="kc">TRUE</span><span class="p">)}</span></div><div class='line' id='LC228'><br/></div><div class='line' id='LC229'>f.quantile.boot <span class="o">&lt;-</span>  <span class="kr">function</span><span class="p">(</span>i<span class="p">,</span>x<span class="p">,</span>fac<span class="p">,</span>R<span class="p">,</span>probs<span class="o">=</span><span class="m">0.99</span><span class="p">){</span></div><div class='line' id='LC230'>&nbsp;&nbsp;&nbsp;&nbsp;require<span class="p">(</span>boot<span class="p">)</span></div><div class='line' id='LC231'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kr">if</span><span class="p">(</span>length<span class="p">(</span>na.exclude<span class="p">(</span>x<span class="p">[</span>fac<span class="o">==</span>i<span class="p">]))</span><span class="o">&gt;</span><span class="m">0</span><span class="p">){</span></div><div class='line' id='LC232'>quant.boot <span class="o">&lt;-</span> boot<span class="p">(</span>x<span class="p">[</span>fac<span class="o">==</span>i<span class="p">],</span>f.quantile<span class="p">,</span>R<span class="o">=</span>R<span class="p">,</span>probs<span class="o">=</span>probs<span class="p">)</span></div><div class='line' id='LC233'><span class="kr">return</span><span class="p">(</span>as.matrix<span class="p">(</span>c<span class="p">(</span>mean<span class="o">=</span>mean<span class="p">(</span>quant.boot<span class="o">$</span>t<span class="p">),</span>sd<span class="o">=</span>sd<span class="p">(</span>quant.boot<span class="o">$</span>t<span class="p">),</span>nobs<span class="o">=</span>length<span class="p">(</span>na.exclude<span class="p">(</span>x<span class="p">[</span>fac<span class="o">==</span>i<span class="p">]))),</span>ncol<span class="o">=</span><span class="m">3</span><span class="p">,</span>nrow<span class="o">=</span><span class="m">1</span><span class="p">))</span></div><div class='line' id='LC234'><span class="p">}</span><span class="kr">else</span><span class="p">{</span></div><div class='line' id='LC235'><span class="kr">return</span><span class="p">(</span>as.matrix<span class="p">(</span>c<span class="p">(</span>mean<span class="o">=</span><span class="kc">NA</span><span class="p">,</span>sd<span class="o">=</span><span class="kc">NA</span><span class="p">,</span>nobs<span class="o">=</span><span class="kc">NA</span><span class="p">),</span>ncol<span class="o">=</span><span class="m">3</span><span class="p">,</span>nrow<span class="o">=</span><span class="m">1</span><span class="p">))</span></div><div class='line' id='LC236'><span class="p">}</span></div><div class='line' id='LC237'><span class="p">}</span></div><div class='line' id='LC238'><br/></div><div class='line' id='LC239'><span class="c1">#######################</span></div><div class='line' id='LC240'><span class="c1">### function to compute number of dead per plot </span></div><div class='line' id='LC241'>function.perc.dead <span class="o">&lt;-</span>  <span class="kr">function</span><span class="p">(</span>dead<span class="p">){</span></div><div class='line' id='LC242'>&nbsp;sum<span class="p">(</span>dead<span class="p">)</span><span class="o">/</span>length<span class="p">(</span>dead<span class="p">)}</span></div><div class='line' id='LC243'><br/></div><div class='line' id='LC244'><br/></div><div class='line' id='LC245'>function.perc.dead2 <span class="o">&lt;-</span> <span class="kr">function</span><span class="p">(</span>dead<span class="p">)</span> <span class="p">{</span> out <span class="o">&lt;-</span> sum<span class="p">(</span>dead<span class="p">,</span>na.rm<span class="o">=</span><span class="k-Variable">T</span><span class="p">)</span><span class="o">/</span>length<span class="p">(</span>dead<span class="p">[</span><span class="o">!</span>is.na<span class="p">(</span>dead<span class="p">)]);</span> <span class="kr">if</span><span class="p">(</span><span class="o">!</span>is.finite<span class="p">(</span>out<span class="p">))</span> out <span class="o">&lt;-</span> <span class="kc">NA</span><span class="p">;</span> <span class="kr">return</span><span class="p">(</span>out<span class="p">)</span> <span class="p">}</span></div><div class='line' id='LC246'><br/></div><div class='line' id='LC247'><br/></div><div class='line' id='LC248'><span class="c1">##########################</span></div><div class='line' id='LC249'><span class="c1">### GENERATE A R.object per ecoregion</span></div><div class='line' id='LC250'><br/></div><div class='line' id='LC251'>function.replace.NA.negative <span class="o">&lt;-</span> <span class="kr">function</span><span class="p">(</span>data.BA.SP<span class="p">){</span></div><div class='line' id='LC252'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kr">for</span> <span class="p">(</span>i <span class="kr">in</span> <span class="m">2</span><span class="o">:</span>ncol<span class="p">(</span>data.BA.SP<span class="p">)){</span></div><div class='line' id='LC253'>eval<span class="p">(</span>parse<span class="p">(</span>text<span class="o">=</span>paste<span class="p">(</span><span class="s">&quot;data.BA.SP[is.na(&quot;</span><span class="p">,</span>names<span class="p">(</span>data.BA.SP<span class="p">)[</span>i<span class="p">],</span><span class="s">&quot;),&quot;</span><span class="p">,</span>names<span class="p">(</span>data.BA.SP<span class="p">)[</span>i<span class="p">],</span><span class="s">&quot;:=0]&quot;</span><span class="p">,</span>sep<span class="o">=</span><span class="s">&quot;&quot;</span><span class="p">)))</span></div><div class='line' id='LC254'>eval<span class="p">(</span>parse<span class="p">(</span>text<span class="o">=</span>paste<span class="p">(</span><span class="s">&quot;data.BA.SP[&quot;</span><span class="p">,</span>names<span class="p">(</span>data.BA.SP<span class="p">)[</span>i<span class="p">],</span><span class="s">&quot;&lt;0,&quot;</span><span class="p">,</span>names<span class="p">(</span>data.BA.SP<span class="p">)[</span>i<span class="p">],</span><span class="s">&quot;:=0]&quot;</span><span class="p">,</span>sep<span class="o">=</span><span class="s">&quot;&quot;</span><span class="p">)))</span></div><div class='line' id='LC255'><span class="p">}</span></div><div class='line' id='LC256'>print<span class="p">(</span><span class="s">&#39;NA and negative replaced&#39;</span><span class="p">)</span></div><div class='line' id='LC257'><span class="kr">return</span><span class="p">(</span>data.BA.SP<span class="p">)</span></div><div class='line' id='LC258'><span class="p">}</span>    </div><div class='line' id='LC259'><br/></div><div class='line' id='LC260'><span class="c1">##############################################################</span></div><div class='line' id='LC261'><span class="c1">##function to generate data in good format per ecoregion</span></div><div class='line' id='LC262'>fun.data.per.ecoregion <span class="o">&lt;-</span> <span class="kr">function</span><span class="p">(</span>ecoregion<span class="p">,</span>data.tot<span class="p">,</span>plot.name<span class="p">,</span>weight.full.plot<span class="p">,</span>name.country<span class="p">,</span>data.TRY<span class="o">=</span><span class="kc">NA</span><span class="p">,</span>species.lookup<span class="o">=</span><span class="kc">NA</span><span class="p">){</span></div><div class='line' id='LC263'><span class="kr">if</span><span class="p">(</span>is.null<span class="p">(</span>data.tot<span class="p">[[</span><span class="s">&#39;weights&#39;</span><span class="p">]]))</span> stop<span class="p">(</span><span class="s">&quot;Please create a weights vector, even if it is completely NA&quot;</span><span class="p">)</span></div><div class='line' id='LC264'>require<span class="p">(</span>data.table<span class="p">)</span></div><div class='line' id='LC265'>data.tot <span class="o">&lt;-</span>  data.table<span class="p">(</span>data.tot<span class="p">)</span></div><div class='line' id='LC266'>data <span class="o">&lt;-</span> data.tot<span class="p">[</span>ecocode<span class="o">==</span>ecoregion<span class="p">,]</span></div><div class='line' id='LC267'>rm<span class="p">(</span>data.tot<span class="p">)</span></div><div class='line' id='LC268'>data.BA.SP <span class="o">&lt;-</span> BA.SP.FUN.census<span class="p">(</span>census<span class="o">=</span>data<span class="p">[[</span><span class="s">&#39;census&#39;</span><span class="p">]],</span></div><div class='line' id='LC269'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obs.id<span class="o">=</span>as.vector<span class="p">(</span>data<span class="p">[[</span><span class="s">&#39;obs.id&#39;</span><span class="p">]]),</span></div><div class='line' id='LC270'>			       diam<span class="o">=</span>as.vector<span class="p">(</span>data<span class="p">[[</span><span class="s">&#39;D&#39;</span><span class="p">]]),</span></div><div class='line' id='LC271'>		    	       sp<span class="o">=</span>as.vector<span class="p">(</span>data<span class="p">[[</span><span class="s">&#39;sp&#39;</span><span class="p">]]),</span></div><div class='line' id='LC272'>			       id.plot<span class="o">=</span>as.vector<span class="p">(</span>data<span class="p">[[</span><span class="s">&#39;plot&#39;</span><span class="p">]]),</span></div><div class='line' id='LC273'>			       weights<span class="o">=</span>data<span class="p">[[</span><span class="s">&#39;weights&#39;</span><span class="p">]],</span></div><div class='line' id='LC274'>			       weight.full.plot<span class="o">=</span>weight.full.plot<span class="p">)</span></div><div class='line' id='LC275'><br/></div><div class='line' id='LC276'>print<span class="p">(</span><span class="s">&#39;competition index computed&#39;</span><span class="p">)</span></div><div class='line' id='LC277'><span class="c1">## change NA and &lt;0 data for 0</span></div><div class='line' id='LC278'>data.BA.SP <span class="o">&lt;-</span> function.replace.NA.negative<span class="p">(</span>data.BA.SP<span class="p">)</span></div><div class='line' id='LC279'><span class="c1">### CHECK IF sp and sp name for column are the same</span></div><div class='line' id='LC280'><span class="kr">if</span><span class="p">(</span>sum<span class="p">(</span><span class="o">!</span><span class="p">(</span>names<span class="p">(</span>data.BA.SP<span class="p">)[</span><span class="m">-1</span><span class="p">]</span> <span class="o">%in%</span> unique<span class="p">(</span>data<span class="p">[[</span><span class="s">&quot;sp&quot;</span><span class="p">]])))</span> <span class="o">&gt;</span><span class="m">0</span><span class="p">)</span> stop<span class="p">(</span><span class="s">&quot;competition index sp name not the same as in data&quot;</span><span class="p">)</span></div><div class='line' id='LC281'><span class="c1">#### compute BA tot for all competitors</span></div><div class='line' id='LC282'><span class="c1">## data.BA.SP[,BATOT:=sum(.SD),by=obs.id] ## slower than apply why?? </span></div><div class='line' id='LC283'>BATOT.s <span class="o">&lt;-</span>  apply<span class="p">(</span>data.frame<span class="p">(</span>data.BA.SP<span class="p">)[,</span><span class="m">-1</span><span class="p">],</span>MARGIN<span class="o">=</span><span class="m">1</span><span class="p">,</span>FUN<span class="o">=</span>sum<span class="p">)</span></div><div class='line' id='LC284'>data.BA.SP<span class="p">[,</span>BATOT<span class="o">:=</span>BATOT.s<span class="p">]</span></div><div class='line' id='LC285'>print<span class="p">(</span><span class="s">&#39;BATOT COMPUTED&#39;</span><span class="p">)</span></div><div class='line' id='LC286'><span class="c1">### create data frame</span></div><div class='line' id='LC287'>DT.temp <span class="o">&lt;-</span> data.table<span class="p">(</span>obs.id<span class="o">=</span>data<span class="p">[[</span><span class="s">&quot;obs.id&quot;</span><span class="p">]],</span>ecocode<span class="o">=</span>data<span class="p">[[</span><span class="s">&quot;ecocode&quot;</span><span class="p">]])</span></div><div class='line' id='LC288'>setkeyv<span class="p">(</span>DT.temp<span class="p">,</span><span class="s">&quot;obs.id&quot;</span><span class="p">)</span></div><div class='line' id='LC289'>setkeyv<span class="p">(</span>data.BA.SP<span class="p">,</span><span class="s">&quot;obs.id&quot;</span><span class="p">)</span></div><div class='line' id='LC290'>print<span class="p">(</span><span class="s">&#39;starting last merge&#39;</span><span class="p">)</span></div><div class='line' id='LC291'>data.BA.sp <span class="o">&lt;-</span> merge<span class="p">(</span>DT.temp<span class="p">,</span>data.BA.SP<span class="p">)</span></div><div class='line' id='LC292'><span class="c1">## reorder data</span></div><div class='line' id='LC293'>data <span class="o">&lt;-</span>  data.table<span class="p">(</span>data<span class="p">)</span></div><div class='line' id='LC294'>setkeyv<span class="p">(</span>data<span class="p">,</span><span class="s">&quot;obs.id&quot;</span><span class="p">)</span></div><div class='line' id='LC295'><span class="c1">## test if same order</span></div><div class='line' id='LC296'><span class="kr">if</span><span class="p">(</span>sum<span class="p">(</span><span class="o">!</span>data.BA.sp<span class="p">[[</span><span class="s">&quot;obs.id&quot;</span><span class="p">]]</span> <span class="o">==</span> data<span class="p">[[</span><span class="s">&quot;obs.id&quot;</span><span class="p">]])</span> <span class="o">&gt;</span><span class="m">0</span><span class="p">)</span> stop<span class="p">(</span><span class="s">&quot;competition index not in the same order than data&quot;</span><span class="p">)</span></div><div class='line' id='LC297'><span class="c1">#####</span></div><div class='line' id='LC298'><span class="c1">## ADD TRY DATA OR TRAITS IF NEEDED</span></div><div class='line' id='LC299'><span class="kr">if</span><span class="p">(</span><span class="o">!</span>is.na<span class="p">(</span>data.TRY<span class="p">)){</span></div><div class='line' id='LC300'>sp.extract <span class="o">&lt;-</span> species.lookup<span class="p">[</span>species.lookup<span class="p">[[</span><span class="s">&quot;sp&quot;</span><span class="p">]]</span> <span class="o">%in%</span> unique<span class="p">(</span>data<span class="p">[[</span><span class="s">&quot;sp&quot;</span><span class="p">]]),]</span></div><div class='line' id='LC301'>data.traits <span class="o">&lt;-</span> fun.extract.format.sp.traits.TRY<span class="p">(</span>sp<span class="o">=</span>sp.extract<span class="p">[[</span><span class="s">&quot;sp&quot;</span><span class="p">]],</span>sp.syno.table<span class="o">=</span>sp.extract<span class="p">,</span>data.TRY<span class="p">)</span></div><div class='line' id='LC302'><span class="c1">### TO DO ADD OPTION TO INCLUE OTHER DATA on MAX HEIGHT</span></div><div class='line' id='LC303'><span class="c1">## save everything as a list</span></div><div class='line' id='LC304'>print<span class="p">(</span>dim<span class="p">(</span>data.traits<span class="p">))</span></div><div class='line' id='LC305'>list.temp <span class="o">&lt;-</span> list<span class="p">(</span>data.tree<span class="o">=</span>data<span class="p">,</span>data.BA.SP<span class="o">=</span>data.BA.sp<span class="p">,</span>data.traits<span class="o">=</span>data.traits<span class="p">)</span></div><div class='line' id='LC306'>save<span class="p">(</span>list.temp<span class="p">,</span>file<span class="o">=</span>paste<span class="p">(</span><span class="s">&quot;./data/process/list&quot;</span><span class="p">,</span>name.country<span class="p">,</span>ecoregion<span class="p">,</span><span class="s">&quot;Rdata&quot;</span><span class="p">,</span>sep<span class="o">=</span><span class="s">&quot;.&quot;</span><span class="p">))</span></div><div class='line' id='LC307'><span class="p">}</span><span class="kr">else</span><span class="p">{</span></div><div class='line' id='LC308'>list.temp <span class="o">&lt;-</span> list<span class="p">(</span>data.tree<span class="o">=</span>data<span class="p">,</span>data.BA.SP<span class="o">=</span>data.BA.sp<span class="p">,</span>data.traits<span class="o">=</span><span class="kc">NA</span><span class="p">)</span></div><div class='line' id='LC309'>saveRDS<span class="p">(</span>list.temp<span class="p">,</span>file<span class="o">=</span>paste<span class="p">(</span><span class="s">&quot;./data/process/list&quot;</span><span class="p">,</span>name.country<span class="p">,</span>ecoregion<span class="p">,</span><span class="s">&quot;Rdata&quot;</span><span class="p">,</span>sep<span class="o">=</span><span class="s">&quot;.&quot;</span><span class="p">))</span></div><div class='line' id='LC310'><span class="p">}</span></div><div class='line' id='LC311'><span class="p">}</span>    </div><div class='line' id='LC312'><br/></div><div class='line' id='LC313'><br/></div><div class='line' id='LC314'><span class="c1">#####################################</span></div><div class='line' id='LC315'><span class="c1">#####################################</span></div><div class='line' id='LC316'><span class="c1">### FUNCTION TO COMPUTE BA.SP.XY PER PLOT AND MERGE TOGETHER</span></div><div class='line' id='LC317'><span class="c1">#### function to be apply per site</span></div><div class='line' id='LC318'>fun.compute.BA.SP.XY.per.plot <span class="o">&lt;-</span> <span class="kr">function</span><span class="p">(</span>i<span class="p">,</span>data.tree<span class="p">,</span>Rlim<span class="p">,</span>xy.name<span class="o">=</span>c<span class="p">(</span><span class="s">&#39;x&#39;</span><span class="p">,</span><span class="s">&#39;y&#39;</span><span class="p">),</span>parallel<span class="o">=</span><span class="kc">FALSE</span><span class="p">,</span>rpuDist<span class="o">=</span><span class="kc">FALSE</span><span class="p">){</span></div><div class='line' id='LC319'>data.tree.s <span class="o">&lt;-</span> subset<span class="p">(</span>data.tree<span class="p">,</span>subset<span class="o">=</span>data.tree<span class="p">[[</span><span class="s">&quot;plot&quot;</span><span class="p">]]</span> <span class="o">==</span>i<span class="p">)</span></div><div class='line' id='LC320'>BA.SP.temp <span class="o">&lt;-</span> BA.SP.FUN.XY<span class="p">(</span>obs.id<span class="o">=</span>data.tree.s<span class="p">[[</span><span class="s">&#39;obs.id&#39;</span><span class="p">]],</span></div><div class='line' id='LC321'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xy.table<span class="o">=</span>data.tree.s<span class="p">[,</span>xy.name<span class="p">],</span></div><div class='line' id='LC322'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;diam<span class="o">=</span>data.tree.s<span class="p">[[</span><span class="s">&#39;D&#39;</span><span class="p">]],</span></div><div class='line' id='LC323'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sp<span class="o">=</span><span class="p">(</span>data.tree.s<span class="p">[[</span><span class="s">&#39;sp&#39;</span><span class="p">]]),</span></div><div class='line' id='LC324'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rlim<span class="o">=</span><span class="m">15</span><span class="p">,</span></div><div class='line' id='LC325'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parallel<span class="o">=</span><span class="kc">FALSE</span><span class="p">,</span></div><div class='line' id='LC326'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rpuDist<span class="o">=</span><span class="kc">FALSE</span><span class="p">)</span></div><div class='line' id='LC327'><br/></div><div class='line' id='LC328'><span class="c1">## replace NA per zero</span></div><div class='line' id='LC329'>print<span class="p">(</span><span class="s">&#39;replacing NA per zero&#39;</span><span class="p">)</span></div><div class='line' id='LC330'>BA.SP.temp<span class="p">[</span>is.na<span class="p">(</span>BA.SP.temp<span class="p">)]</span> <span class="o">&lt;-</span> <span class="m">0</span></div><div class='line' id='LC331'>print<span class="p">(</span><span class="s">&#39;done&#39;</span><span class="p">)</span></div><div class='line' id='LC332'><span class="c1">### rpud installation very cumbersome not needed ?</span></div><div class='line' id='LC333'><span class="c1">### longer in parallel why ?</span></div><div class='line' id='LC334'><span class="kr">if</span><span class="p">(</span>sum<span class="p">(</span><span class="o">!</span> rownames<span class="p">(</span>BA.SP.temp<span class="p">)</span><span class="o">==</span>data.tree.s<span class="p">[[</span><span class="s">&#39;obs.id&#39;</span><span class="p">]])</span> <span class="o">&gt;</span><span class="m">0</span><span class="p">)</span> stop<span class="p">(</span><span class="s">&#39;rows not in the good order&#39;</span><span class="p">)</span></div><div class='line' id='LC335'><span class="kr">if</span><span class="p">(</span>sum<span class="p">(</span><span class="o">!</span>colnames<span class="p">(</span>BA.SP.temp<span class="p">)</span><span class="o">==</span>as.character<span class="p">((</span>levels<span class="p">(</span>data.tree.s<span class="p">[[</span><span class="s">&#39;sp&#39;</span><span class="p">]]))))</span><span class="o">&gt;</span><span class="m">0</span><span class="p">)</span> stop<span class="p">(</span><span class="s">&#39;colnames does mot match species name&#39;</span><span class="p">)</span></div><div class='line' id='LC336'><br/></div><div class='line' id='LC337'><span class="c1">### compute sum per row</span></div><div class='line' id='LC338'>BATOT <span class="o">&lt;-</span> apply<span class="p">(</span>BA.SP.temp<span class="p">,</span>MARGIN<span class="o">=</span><span class="m">1</span><span class="p">,</span>FUN<span class="o">=</span>sum<span class="p">)</span></div><div class='line' id='LC339'>data.res <span class="o">&lt;-</span> data.frame<span class="p">(</span>obs.id<span class="o">=</span>data.tree.s<span class="p">[[</span><span class="s">&#39;obs.id&#39;</span><span class="p">]],</span>BA.SP.temp<span class="p">,</span>BATOT<span class="o">=</span>BATOT<span class="p">)</span></div><div class='line' id='LC340'><span class="kr">return</span><span class="p">(</span>data.res<span class="p">)</span></div><div class='line' id='LC341'><span class="p">}</span></div><div class='line' id='LC342'><br/></div><div class='line' id='LC343'><br/></div><div class='line' id='LC344'><br/></div><div class='line' id='LC345'><br/></div><div class='line' id='LC346'><br/></div></pre></div>
+            </td>
+          </tr>
+        </table>
+  </div>
+
+  </div>
+</div>
+
+<a href="#jump-to-line" rel="facebox[.linejump]" data-hotkey="l" class="js-jump-to-line" style="display:none">Jump to Line</a>
+<div id="jump-to-line" style="display:none">
+  <form accept-charset="UTF-8" class="js-jump-to-line-form">
+    <input class="linejump-input js-jump-to-line-field" type="text" placeholder="Jump to line&hellip;" autofocus>
+    <button type="submit" class="button">Go</button>
+  </form>
+</div>
+
+        </div>
+
+      </div><!-- /.repo-container -->
+      <div class="modal-backdrop"></div>
+    </div><!-- /.container -->
+  </div><!-- /.site -->
+
+
+    </div><!-- /.wrapper -->
+
+      <div class="container">
+  <div class="site-footer">
+    <ul class="site-footer-links right">
+      <li><a href="https://status.github.com/">Status</a></li>
+      <li><a href="http://developer.github.com">API</a></li>
+      <li><a href="http://training.github.com">Training</a></li>
+      <li><a href="http://shop.github.com">Shop</a></li>
+      <li><a href="/blog">Blog</a></li>
+      <li><a href="/about">About</a></li>
+
+    </ul>
+
+    <a href="/">
+      <span class="mega-octicon octicon-mark-github"></span>
+    </a>
+
+    <ul class="site-footer-links">
+      <li>&copy; 2013 <span title="0.03945s from github-fe117-cp1-prd.iad.github.net">GitHub</span>, Inc.</li>
+        <li><a href="/site/terms">Terms</a></li>
+        <li><a href="/site/privacy">Privacy</a></li>
+        <li><a href="/security">Security</a></li>
+        <li><a href="/contact">Contact</a></li>
+    </ul>
+  </div><!-- /.site-footer -->
+</div><!-- /.container -->
+
+
+    <div class="fullscreen-overlay js-fullscreen-overlay" id="fullscreen_overlay">
+  <div class="fullscreen-container js-fullscreen-container">
+    <div class="textarea-wrap">
+      <textarea name="fullscreen-contents" id="fullscreen-contents" class="js-fullscreen-contents" placeholder="" data-suggester="fullscreen_suggester"></textarea>
+          <div class="suggester-container">
+              <div class="suggester fullscreen-suggester js-navigation-container" id="fullscreen_suggester"
+                 data-url="/kunstler/data.format.workshop/suggestions/commit">
+              </div>
+          </div>
+    </div>
+  </div>
+  <div class="fullscreen-sidebar">
+    <a href="#" class="exit-fullscreen js-exit-fullscreen tooltipped leftwards" title="Exit Zen Mode">
+      <span class="mega-octicon octicon-screen-normal"></span>
+    </a>
+    <a href="#" class="theme-switcher js-theme-switcher tooltipped leftwards"
+      title="Switch themes">
+      <span class="octicon octicon-color-mode"></span>
+    </a>
+  </div>
+</div>
+
+
+
+    <div id="ajax-error-message" class="flash flash-error">
+      <span class="octicon octicon-alert"></span>
+      <a href="#" class="octicon octicon-remove-close close ajax-error-dismiss"></a>
+      Something went wrong with that request. Please try again.
+    </div>
+
     
-    ### compute sum per row
-    BATOT <- apply(BA.SP.temp, MARGIN = 1, FUN = sum)
-    data.res <- data.frame(obs.id = data.tree.s[["obs.id"]], BA.SP.temp, BATOT = BATOT)
-    return(data.res)
-} 
+  </body>
+</html>
+
diff --git a/merge.data.US.R b/merge.data.US.R
index 275c7c10b3b411573e04403500fd8ffcf12c2854..7d68e412a7364c9bba189286644297079ae17000 100644
--- a/merge.data.US.R
+++ b/merge.data.US.R
@@ -1,57 +1,63 @@
+#!/usr/bin/env Rscript
+
 ### MERGE us DATA Edited by FH
-rm(list = ls())
+library(reshape, quietly=TRUE)
 source("./R/format.function.R")
-library(reshape)
 source("./R/FUN.TRY.R")
 
-######################### READ DATA read individuals tree data
-data.us <- read.csv("./data/raw/DataUS/FIA51_trees_w_supp.csv", header = TRUE, stringsAsFactors = FALSE)
-
 ### read species names
-species.clean <- read.csv("./data/species.list/REF_SPECIES.CSV", stringsAsFactors = FALSE)
-## select column to keep
-species.clean <- subset(species.clean, select = c("SPCD", "GENUS", "SPECIES", "VARIETY", 
-    "SUBSPECIES", "SPECIES_SYMBOL"))
-species.clean$Latin_name <- paste(species.clean[["GENUS"]], species.clean[["SPECIES"]], 
-    sep = " ")
-species.clean$Latin_name_syn <- paste(species.clean[["GENUS"]], species.clean[["SPECIES"]], 
-    sep = " ")
-
-names(species.clean)[1] <- "sp"
-species.clean[["sp"]] <- paste("sp", species.clean[["sp"]], sep = ".")
-
-###################################### MASSAGE TRAIT DATA HEIGHT DATA FOR TREE MISSING BRING US DATA FOR HEIGHT OVER
-###################################### WHEN WE ANALYZE THAT DATASET LATER ON
-
-##################################### FORMAT INDIVIDUAL TREE DATA
-
-## change unit and names of variables to be the same in all data for the tree
-data.us$G <- 10 * (data.us$FinalDbh - data.us$InitDbh)/data.us$Interval  ## diameter growth in mm per year
-data.us$G[which(data.us$InitDbh == 0 | data.us$FinalDbh == -999)] <- NA
-data.us$year <- data.us$Interval  ## number of year between measuremen
-data.us$D <- data.us[["InitDbh"]]
-data.us$D[data.us$D == 0] <- NA
-## diameter in cm
-data.us$dead <- as.numeric(data.us$FinalDbh > 0)  ## dummy variable for dead tree 0 alive 1 dead
-data.us$sp <- as.character(data.us[["Species"]])  ## species code
-data.us$plot <- as.character(data.us[["PlotID"]])  ## plot code
-data.us$subplot <- paste(as.character(data.us[["PlotID"]]), as.character(data.us[["SubplotNumber"]]), 
-    sep = ".")  ## plot code
-data.us$htot <- rep(NA, length(data.us[["Species"]]))  ## height of tree in m - MISSING
-data.us$tree.id <- as.character(data.us$TreeID)
-## tree unique id
-data.us$sp.name <- NA
-
-### add plot weights for computation of competition index (in 1/m^2)
-data.us$weights <- 1/(10000 * data.us[["PlotSize"]])
-
-###################### ECOREGION merge greco to have no ecoregion with low number of observation
+load_species_list <- function(filename = "./data/raw/DataUS/REF_SPECIES.CSV"){
+    data <- read.csv(filename, stringsAsFactors = FALSE)
+    ## select column to keep
+    data <- subset(data, select = c("SPCD", "GENUS", "SPECIES", "VARIETY", 
+        "SUBSPECIES", "SPECIES_SYMBOL"))
+    data$Latin_name <- paste(data[["GENUS"]], data[["SPECIES"]], sep = " ")
+    data$Latin_name_syn <- paste(data[["GENUS"]], data[["SPECIES"]], sep = " ")
+
+    names(data)[1] <- "sp"
+    data[["sp"]] <- paste("sp", data[["sp"]], sep = ".")    
+    data
+}
+
+load_inventory_data <- function(filename = "./data/raw/DataUS/FIA51_trees_w_supp.csv"){
+    ## READ DATA read individuals tree data
+    data <- read.csv(filename, header = TRUE, stringsAsFactors = FALSE)
+
+    ####### MASSAGE TRAIT DATA HEIGHT DATA FOR TREE MISSING BRING US DATA FOR HEIGHT OVER
+    ####### WHEN WE ANALYZE THAT DATASET LATER ON
+
+    ###### FORMAT INDIVIDUAL TREE DATA
+
+    ## change unit and names of variables to be the same in all data for the tree
+    data$G <- 10 * (data$FinalDbh - data$InitDbh)/data$Interval  ## diameter growth in mm per year
+    data$G[which(data$InitDbh == 0 | data$FinalDbh == -999)] <- NA
+    data$year <- data$Interval  ## number of year between measuremen
+    data$D <- data[["InitDbh"]] ## diameter in cm
+    data$D[data$D == 0] <- NA
+    data$dead <- as.numeric(data$FinalDbh > 0)  ## dummy variable for dead tree 0 alive 1 dead
+    data$sp <- as.character(data[["Species"]])  ## species code
+    data$plot <- as.character(data[["PlotID"]])  ## plot code
+    data$subplot <- paste(as.character(data[["PlotID"]]), as.character(data[["SubplotNumber"]]), 
+        sep = ".")  ## plot code
+    data$htot <- rep(NA, length(data[["Species"]]))  ## height of tree in m - MISSING
+    data$tree.id <- as.character(data$TreeID) ## unique id
+    data$sp.name <- NA
+
+    ### add plot weights for computation of competition index (in 1/m^2)
+    data$weights <- 1/(10000 * data.us[["PlotSize"]])
+    data
+}
+
+data.us <- load_inventory_data()
+
+###### ECOREGION merge greco to have no ecoregion with low number of observation
 greco <- read.csv(file = "./data/raw/DataUS/EcoregionCodes.csv", header = T)
 colnames(greco)[1] <- "Ecocode"
 
 table(data.us$Ecocode)
 data.us <- merge(data.us, greco[, -4], by = "Ecocode")
 data.us$DIVISION <- factor(data.us$DIVISION)
+
 ## Some ecoregions still have small # of individuals, so create a variable which
 ## does division if # ind < 10000 else it reads Domain
 data.us$eco_codemerged <- as.character(data.us$DIVISION)
@@ -63,8 +69,8 @@ for (i in 1:length(sel.small.div)) {
     data.us$eco_codemerged[find.ind] <- as.character(data.us$DOMAIN)[find.ind]
 }
 
-###################### PERCENT DEAD variable percent dead/cannot do with since dead variable is
-###################### missing compute numer of dead per plot to remove plot with disturbance
+###### PERCENT DEAD variable percent dead/cannot do with since dead variable is
+###### missing compute numer of dead per plot to remove plot with disturbance
 perc.dead <- tapply(data.us[["dead"]], INDEX = data.us[["plot"]], FUN = function.perc.dead)
 # ## VARIABLE TO SELECT PLOT WITH NOT BIG DISTURBANCE KEEP OFTHER VARIABLES IF
 # AVAILABLE (disturbance record)
@@ -72,8 +78,7 @@ data.us <- merge(data.us, data.frame(plot = names(perc.dead), perc.dead = perc.d
     by = "plot", sort = FALSE)
 
 
-########################################################### PLOT SELECTION FOR THE ANALYSIS
-
+##### PLOT SELECTION FOR THE ANALYSIS
 
 ## remove everything from memory not need before computation
 rm(greco, perc.dead, tab.small.div, sel.small.div)
@@ -89,6 +94,7 @@ vec.basic.var <- c("tree.id", "sp", "plot", "subplot", "ecocode", "D", "G", "dea
     "year", "htot", "Lon", "Lat", "perc.dead", "weights")
 data.tree <- subset(data.us, select = c(vec.basic.var, vec.abio.var.names))
 rm(data.us)
+
 ## creat row unique id
 data.tree$obs.id <- as.character(1:nrow(data.tree))
 gc()
@@ -96,13 +102,17 @@ gc()
 ### read TRY data
 TRY.DATA.FORMATED <- readRDS("./data/process/TRY.DATA.FORMATED.rds")
 
-#################### GENERATE ONE OBJECT PER ECOREGION
+#### GENERATE ONE OBJECT PER ECOREGION
 
 # vector of ecoregion name
 ecoregion.unique <- unique(data.tree[["ecocode"]])
 
-
-#### lapply function
-system.time(lapply(ecoregion.unique, FUN = fun.data.per.ecoregion, data.tot = data.tree, 
-    plot.name = "subplot", weight.full.plot = NA, name.country = "US", data.TRY = TRY.DATA.FORMATED, 
-    species.lookup = species.clean)) 
+#### split data by ecoregion and save to file
+system.time(lapply(ecoregion.unique, FUN = fun.data.per.ecoregion, 
+    data.tot = data.tree, 
+    plot.name = "subplot", 
+    weight.full.plot = NA, 
+    name.country = "US", 
+    data.TRY = TRY.DATA.FORMATED, 
+    species.lookup = load_species_list(), 
+    output.dir = "output"))