diff --git a/R/FUN.TRY.R b/R/FUN.TRY.R index 40e15598440ce0fedec3a5f3fe08774abef3fe0d..9f35f19f0e4f1469040dc3e9b5017f05869515b8 100644 --- a/R/FUN.TRY.R +++ b/R/FUN.TRY.R @@ -157,11 +157,11 @@ return(res.temp) ####### extract mean sd per species or genus ####### added species synonyme -fun.species.traits <- function(species,species.table,col.sp="Latin_name",col.sp.syno="Latin_name_syn",traits,data){ +fun.species.traits <- function(species.code,species.table,col.sp="sp",col.sp.syno="Latin_name_syn",traits,data){ vec.mean <- vec.sd <- vec.nobs <- rep(NA,length(traits)) vec.exp <- vec.genus <- rep(FALSE,length(traits)) names(vec.mean) <- names(vec.sd) <- names(vec.exp) <- names(vec.genus) <- names(vec.nobs)<- traits - species.syno <- species.table[species.table[[col.sp]]==species,col.sp.syno] + species.syno <- species.table[species.table[[col.sp]]==species.code,col.sp.syno] #browser() for(i in traits){ if(sum((data$AccSpeciesName %in% species.syno) & !is.na(data[[i]]))>0){ ## if data for this species or syno @@ -183,7 +183,7 @@ fun.species.traits <- function(species,species.table,col.sp="Latin_name",col.sp. } }else{### compute data at genus level if no data for the species - genus <- sub(" .*","",species) + genus <- sub(" .*","",species.syno) if(sum(grepl(genus,data$AccSpeciesName) & (!is.na(data[[i]])))>0){ x <- data[[i]][grepl(genus,data$AccSpeciesName,fixed=TRUE ) & (!is.na(data[[i]])) ] res.temp <- fun.mean.sd.nobs.out(x,i) @@ -235,16 +235,12 @@ return(extract.species.try) } -fun.extract.format.sp.traits.TRY <- function(sp,sp.syno.table=NA,data){ +fun.extract.format.sp.traits.TRY <- function(sp,sp.syno.table,data){ ## check syno data if not create a table with column syno repating the species - if(is.na(sp.syno.table)){ - sp.syno.table <- data.frame(Latin_name=sp,Latin_name_sym=sp) - }else{ - names(sp.syno.table) <- c("Latin_name","Latin_name_sym") - } + ### test data sp and sp.syno.table match -if(sum(!(sp %in% sp.syno.table[["Latin_name"]] ))>0) stop('not same species name in sp and sp.syno.table') -if(sum((sp %in% data[["AccSpeciesName"]] ))==0) stop('not a single similar species name in sp and TRY') +if(sum(!(sp %in% sp.syno.table[["sp"]] ))>0) stop('not same species name in sp and sp.syno.table') +if(sum((sp.syno.table[["Latin_name_syn"]] %in% data[["AccSpeciesName"]] ))==0) stop('not a single similar species name in sp and TRY') ## extract traits <- c("StdValue.Leaf.nitrogen..N..content.per.dry.mass", "StdValue.Seed.mass", @@ -276,6 +272,6 @@ for (i in 1:length(sd.names.1)){ extract.species.try.2[[sd.names.1[i]]][!extract.species.try.2[[genus.names[i]]]] <- sd.vec.sp[i] extract.species.try.2[[sd.names.1[i]]][extract.species.try.2[[genus.names[i]]]] <- sd.vec.genus[i] } -data.frame.TRY <- data.frame(Latin_name=rownames(extract.species.try.2 ),extract.species.try.2) +data.frame.TRY <- data.frame(sp=sp,Latin_name=sp.syno.table[["Latin_name_syn"]],extract.species.try.2) return(data.frame.TRY) } diff --git a/R/format.function.R b/R/format.function.R index f5e42e40350dc60b29e4429cc0689dc3c369e50e..13eceb077b3bdb1476820eef051fb5b2a1a4e988 100644 --- a/R/format.function.R +++ b/R/format.function.R @@ -212,8 +212,8 @@ setkeyv(data,"obs.id") if(sum(!data.BA.sp[["obs.id"]] == data[["obs.id"]]) >0) stop("competition index not in the same order than data") ##### ## TODO ADD TRY DATA OR TRAITS IF NEEDED -sp.extract <- species.lookup[species.lookup[["sp"]] %in% unique(data[["sp"]]),c("sp","Latin_name")] -data.traits <- fun.extract.format.sp.traits.TRY(sp=sp.extract[["Latin_name"]],sp.syno.table=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) ## 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=paste("./data/process/list",name.country,ecoregion,"Rdata",sep=".")) diff --git a/merge.data.US.R b/merge.data.US.R index 4b52e5a5077790ecb72d8620a2f454303263070c..2f2fa6e6edde92103a9f018e3804ae8c0f029773 100644 --- a/merge.data.US.R +++ b/merge.data.US.R @@ -14,6 +14,8 @@ species.clean <- read.csv("./data/species.list/REF_SPECIES.CSV",stringsAsFactors ## 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=".") @@ -101,5 +103,5 @@ ecoregion.unique <- unique(data.tree[["ecocode"]]) #### lapply function -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) - +system.time(lapply(ecoregion.unique[1],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) +)