From fc416f5757642e479c554756fcddbefdc97663b2 Mon Sep 17 00:00:00 2001
From: Francesco Sabatini <francesco.sabatini@idiv.de>
Date: Thu, 20 Aug 2020 10:51:15 +0200
Subject: [PATCH] Results v2 finalized

---
 00_Mesobromion_DataPreparation.R |   2 +-
 02_Mesobromion_ExamineOutput.R   | 366 +++++++++++++++++++++----------
 2 files changed, 250 insertions(+), 118 deletions(-)

diff --git a/00_Mesobromion_DataPreparation.R b/00_Mesobromion_DataPreparation.R
index 99650c5..9541231 100644
--- a/00_Mesobromion_DataPreparation.R
+++ b/00_Mesobromion_DataPreparation.R
@@ -330,7 +330,7 @@ write_delim(env, path="_data/Mesobromion/env.v2.10perc.cov.txt", delim="\t")
 ### create list of relevées
 write_delim(species %>% 
               dplyr::select(RELEVE_NR), 
-            path="_data/Mesobromion/ReleveList.txt", delim="\t")
+            path="_output/S10_ReleveList.txt", delim="\t")
 
 
 ##check for species without trait info
diff --git a/02_Mesobromion_ExamineOutput.R b/02_Mesobromion_ExamineOutput.R
index ab6dfe1..b99cbff 100644
--- a/02_Mesobromion_ExamineOutput.R
+++ b/02_Mesobromion_ExamineOutput.R
@@ -8,6 +8,21 @@ library(vegan)
 source("99_HIDDEN_functions.R")
 source("01b_MesobromionCluster.R")
 
+## ancillary function to get the best combination at a given Number of interactions
+get.best <- function(x, N, labs){
+  out <- x %>% 
+    filter(ntraits==N) %>% 
+    filter(sign_plus==TRUE) %>% 
+    arrange(desc(Coef.obs)) %>% 
+    slice(1) %>% 
+    pull(Trait.comb)
+  lab <- labs %>%
+    filter(Trait.comb %in% strsplit(out, split = "_")[[1]]) %>% 
+    pull(trait.name)
+  return(list(Trait.comb=out, trait.name=lab))
+}
+
+
 ####1.  Reimport data ################################ 
 traits <- read_delim("_data/Mesobromion/traits.v2.10perc.txt", delim="\t")
 traits.sign.cov <- read_delim("_data/Mesobromion/traits.v2.10perc.cov.sign.txt", delim="\t")
@@ -26,30 +41,30 @@ traits <- traits %>%
   mutate_if(~is.character(.), .funs=~as.factor(.)) %>% 
   column_to_rownames("species0")
 
-traits.sign.cov <- traits.sign.cov %>% 
-  as.data.frame() %>% 
-  #  filter(species0 %in% colnames(species)) %>% 
-  mutate_if(~is.character(.), .funs=~as.factor(.)) %>% 
-  column_to_rownames("species0")
-
-traits.sign.pa <- traits.sign.pa %>% 
-  as.data.frame() %>% 
-  #  filter(species0 %in% colnames(species)) %>% 
-  mutate_if(~is.character(.), .funs=~as.factor(.)) %>% 
-  column_to_rownames("species0")
-
+# traits.sign.cov <- traits.sign.cov %>% 
+#   as.data.frame() %>% 
+#   #  filter(species0 %in% colnames(species)) %>% 
+#   mutate_if(~is.character(.), .funs=~as.factor(.)) %>% 
+#   column_to_rownames("species0")
+# 
+# traits.sign.pa <- traits.sign.pa %>% 
+#   as.data.frame() %>% 
+#   #  filter(species0 %in% colnames(species)) %>% 
+#   mutate_if(~is.character(.), .funs=~as.factor(.)) %>% 
+#   column_to_rownames("species0")
+# 
 
 ## adapt trait labs to sign traits only
-trait.labs.sign.cov <- trait.labs %>% 
-  filter(trait.name %in% colnames(traits.sign.cov)) %>% 
-  arrange(match(trait.name, colnames(traits.sign.cov))) %>% 
-  rename(Trait.comb.new=Trait.comb) %>% 
-  mutate(Trait.comb=1:8) %>% 
-  dplyr::select(Trait.comb, everything(), -Trait.comb.new)
+# trait.labs.sign.cov <- trait.labs %>% 
+#   filter(trait.name %in% colnames(traits.sign.cov)) %>% 
+#   arrange(match(trait.name, colnames(traits.sign.cov))) %>% 
+#   rename(Trait.comb.new=Trait.comb) %>% 
+#   mutate(Trait.comb=1:8) %>% 
+#   dplyr::select(Trait.comb, everything(), -Trait.comb.new)
               
 #rename trait based on short labels
 colnames(traits) <- trait.labs$Short_english_name
-colnames(traits.sign.cov) <- trait.labs.sign.cov$Short_english_name
+# colnames(traits.sign.cov) <- trait.labs.sign.cov$Short_english_name
 
 
 ##check traits
@@ -111,29 +126,29 @@ trait.coverage <- species.cov %>%
 trait.recap <- trait.recap %>% 
   left_join(trait.coverage, by=c("Code"="trait"))
 
-write_csv(trait.recap, path="_derived/Mesobromion/Traits.recap.csv")  
+write_csv(trait.recap, path="_output/S3_Traits.recap.csv")  
 
 
 ###### 2. Import output from Cluster #### 
 ##### 2.1 Cover values ######
-## traits onebyone
-myfilelist0 <- list.files(path="_derived/Mesobromion/Cover/onebyone/", pattern="HIDDENcov-nona2_[0-9]+_.RData", full.names = T)
-dataFiles0 = purrr::map(myfilelist0, function(x){get(load(x))})
-#load("_derived/Mesobromion/PresAbs/HIDDEN_round_11.RData")
-corXY.alone = bind_rows(dataFiles0) %>% 
-  as.tbl() %>% 
-  distinct()
-corXY.alone.ci <- get.ci(corXY.alone)
-corXY.alone.ci <- corXY.alone.ci %>% 
-  mutate(trait1=Trait.comb) %>% 
-  mutate_at(.vars=vars(trait1),
-            .funs=~factor(., 
-                          levels=trait.labs$Trait.comb, 
-                          labels=trait.labs$Short_english_name)) %>% 
-  arrange(ntraits, desc(Coef.obs)) %>% 
-  dplyr::select(Trait.comb, Test, n, ntraits, everything()) %>% 
-  mutate(Trait.comb=NA) %>% 
-  mutate(run="alone")
+# ## traits onebyone
+# myfilelist0 <- list.files(path="_derived/Mesobromion/Cover/onebyone/", pattern="HIDDENcov-nona2_[0-9]+_.RData", full.names = T)
+# dataFiles0 = purrr::map(myfilelist0, function(x){get(load(x))})
+# #load("_derived/Mesobromion/PresAbs/HIDDEN_round_11.RData")
+# corXY.alone = bind_rows(dataFiles0) %>% 
+#   as.tbl() %>% 
+#   distinct()
+# corXY.alone.ci <- get.ci(corXY.alone)
+# corXY.alone.ci <- corXY.alone.ci %>% 
+#   mutate(trait1=Trait.comb) %>% 
+#   mutate_at(.vars=vars(trait1),
+#             .funs=~factor(., 
+#                           levels=trait.labs$Trait.comb, 
+#                           labels=trait.labs$Short_english_name)) %>% 
+#   arrange(ntraits, desc(Coef.obs)) %>% 
+#   dplyr::select(Trait.comb, Test, n, ntraits, everything()) %>% 
+#   mutate(Trait.comb=NA) %>% 
+#   mutate(run="alone")
   
 
 ### sequential trait combo
@@ -156,37 +171,17 @@ corXY.all.ci <- corXY.all.ci %>%
   dplyr::select(Trait.comb, Test, n, ntraits, everything()) %>% 
   mutate(run="seq")
 
-### SEQUENTIAL of sign traits 
-# myfilelist <- list.files(path="_derived/Mesobromion/Cover/_test1", pattern="HIDDENcov_round_[0-9]+.RData", full.names = T)
-# dataFiles = purrr::map(myfilelist, function(x){get(load(x))})
-# #load("_derived/Mesobromion/PresAbs/HIDDEN_round_11.RData")
-# corXY.comb = bind_rows(dataFiles) %>% 
-#   as.tbl()
-# 
-# corXY.comb.ci <- get.ci(corXY.comb)
-# corXY.comb.ci <- corXY.comb.ci %>% 
-#   mutate(Trait.comb2=Trait.comb) %>% 
-#   #split strings of trait combinations and add labels
-#   separate(Trait.comb2, into=paste0("trait", 1:8)) %>% 
-#   mutate_at(.vars=vars(trait1:trait3),
-#             .funs=~factor(., 
-#                           levels=trait.labs$Trait.comb, 
-#                           labels=trait.labs$Short_english_name)) %>% 
-#   arrange(ntraits, Coef.obs) %>% 
-#   dplyr::select(Trait.comb, Test, n, ntraits, everything())
-
-
-rm( dataFiles0, dataFiles1)
+rm( dataFiles1) #dataFiles0, 
 
 ### merge together
-corXY.ci <- corXY.all.ci %>% 
-  bind_rows(corXY.alone.ci) 
+corXY.ci <- corXY.all.ci # %>% 
+  #bind_rows(corXY.alone.ci) 
 
 
 #### 2.1.2 One by one - Graph of r(XY)  ####
 ### list traits being significant when taken one by one
 traits.sign.alone <- corXY.ci %>% 
-  filter(run=="alone") %>% 
+  #filter(run=="alone") %>% 
   filter(ntraits==1) %>% 
   filter(sign_plus==T) %>% 
   pull(trait1)
@@ -194,7 +189,7 @@ traits.sign.alone <- corXY.ci %>%
 
 ### Plot combinations one by one
 mydata.byone <- corXY.ci %>% 
-  filter(run=="alone") %>% 
+  #filter(run=="alone") %>% 
   filter(ntraits==1)%>% 
   arrange(Coef.obs) %>% 
   mutate(seq=1:n())
@@ -224,7 +219,7 @@ mydata <- corXY.ci %>%
             all_vars(. %in% traits.sign.alone | is.na(.)))%>% 
   mutate(seq=1:n())
 
-#### 2.1.3 All traits - (Huge) Graph of r(XY) (w/ combinations) ####
+#### ~2.1.3 All traits - (Huge) Graph of r(XY) (w/ combinations) ####
 ### filter combinations where all traits belong to traits.sign.alone
 
 # allpredictors <- top.first %+% (mydata) +
@@ -241,20 +236,6 @@ mydata <- corXY.ci %>%
 
 ######## 2.1.4 Best - Graph of r(XY) using best combination of traits at each level of interaction N  ########
 ### extract best combinations of traits
-## ancillary function to get the best combination at a given Number of interactions
-get.best <- function(x, N, labs){
-  out <- x %>% 
-    filter(ntraits==N) %>% 
-    filter(sign_plus==TRUE) %>% 
-    arrange(desc(Coef.obs)) %>% 
-    slice(1) %>% 
-    pull(Trait.comb)
-  lab <- labs %>%
-    filter(Trait.comb %in% strsplit(out, split = "_")[[1]]) %>% 
-    pull(trait.name)
-  return(list(Trait.comb=out, trait.name=lab))
-}
-
 top.one.by.one <- get.best(mydata, N=1, labs=trait.labs)
 
 ## Routine to extract the best combination at each level of interaction (up to max traits)
@@ -307,7 +288,7 @@ for(nn in 1:maxtraits){
 
 best.4traits <- corXY.ci %>% 
   filter(as.character(Trait.comb)==best.progr[length(best.progr)]) %>% 
-  dplyr::select(trait1:trait7) %>% 
+  dplyr::select(trait1:trait8) %>% 
   mutate_all(~as.character(.))
 best.4traits <- as.character(best.4traits[1,1:4])
 
@@ -333,7 +314,7 @@ mydata.best <- mydata %>%
 
 write_csv(mydata.best %>% 
             dplyr::select(Trait.comb:sign_plus), 
-          path = "_derived/Mesobromion/S5_BestSolutionTiers.csv")
+          path = "_output/S5_BestSolutionTiers.cov.csv")
 
 ### Graph of all the best combinations with text legend
 (top.all <- ggplot(data=(mydata.best %>% 
@@ -368,7 +349,7 @@ tt2 <- ttheme_minimal(
                                 #             dplyr::select(Code, Trait=trait.name) %>% 
                                 #             slice(33:n()), theme=tt2), 
                          nrow=1, rel_widths=c(0.70, 0.3)))
-ggsave(filename = "_pics/Fig5_Best_AllCombinations_CI_pa.png", dpi=400, 
+ggsave(filename = "_pics/Fig5_Best_AllCombinations_CI_cov.png", dpi=400, 
        width=6, height=3, topall.leg)
 
 
@@ -379,54 +360,205 @@ break()
 ####### 2.2.1 Import and adjust dataset ####
 ### merge output from one-by-one and all combo of sign traits
 
-### all traits taken alone 
-myfilelist0 <- list.files(path="_derived/Mesobromion/PresAbs", pattern="HIDDENpa_[0-9]+_.RData", full.names = T)
-dataFiles0 = purrr::map(myfilelist0, function(x){get(load(x))})
+# ### all traits taken alone 
+# myfilelist0 <- list.files(path="_derived/Mesobromion/PresAbs", pattern="HIDDENpa_[0-9]+_.RData", full.names = T)
+# dataFiles0 = purrr::map(myfilelist0, function(x){get(load(x))})
+# #load("_derived/Mesobromion/PresAbs/HIDDEN_round_11.RData")
+# corXY.alone = bind_rows(dataFiles0) %>% 
+#   as.tbl() %>% 
+#   distinct()
+# corXY.alone.ci <- get.ci(corXY.alone)
+# corXY.alone.ci <- corXY.alone.ci %>% 
+#   mutate(trait1=Trait.comb) %>% 
+#   mutate_at(.vars=vars(trait1),
+#             .funs=~factor(., 
+#                           levels=trait.labs$Trait.comb, 
+#                           labels=trait.labs$Short_english_name)) %>% 
+#   arrange(ntraits, Coef.obs) %>% 
+#   dplyr::select(Trait.comb, Test, n, ntraits, everything()) %>% 
+#   mutate(Trait.comb=NA)
+
+
+### combo of sign traits 
+myfilelist <- list.files(path="_derived/Mesobromion/PresAbs", pattern="HIDDENpa_round_[0-9]+.RData", full.names = T)
+dataFiles = purrr::map(myfilelist, function(x){get(load(x))})
 #load("_derived/Mesobromion/PresAbs/HIDDEN_round_11.RData")
-corXY.alone = bind_rows(dataFiles0) %>% 
+corXY.all = bind_rows(dataFiles) %>% 
   as.tbl() %>% 
   distinct()
-corXY.alone.ci <- get.ci(corXY.alone)
-corXY.alone.ci <- corXY.alone.ci %>% 
-  mutate(trait1=Trait.comb) %>% 
-  mutate_at(.vars=vars(trait1),
+
+corXY.ci.pa <- get.ci(corXY.all)
+corXY.ci.pa <- corXY.ci.pa %>% 
+  mutate(Trait.comb2=Trait.comb) %>% 
+  separate(Trait.comb2, into=paste0("trait", 1:14)) %>% 
+  mutate_at(.vars=vars(trait1:trait14),
             .funs=~factor(., 
                           levels=trait.labs$Trait.comb, 
                           labels=trait.labs$Short_english_name)) %>% 
-  arrange(ntraits, Coef.obs) %>% 
+  arrange(ntraits, desc(Coef.obs)) %>% 
   dplyr::select(Trait.comb, Test, n, ntraits, everything()) %>% 
-  mutate(Trait.comb=NA)
+  mutate(run="seq")
 
+rm( dataFiles1, corXY.all) 
 
-### combo of sign traits 
-myfilelist <- list.files(path="_derived/Mesobromion/PresAbs", pattern="HIDDENpresabs_[0-9]+_.RData", full.names = T)
-dataFiles = purrr::map(myfilelist, function(x){get(load(x))})
-#load("_derived/Mesobromion/PresAbs/HIDDEN_round_11.RData")
-corXY.comb = bind_rows(dataFiles) %>% 
-  as.tbl()
 
-corXY.comb.ci <- get.ci(corXY.comb)
-corXY.comb.ci <- corXY.comb.ci %>% 
-  mutate(Trait.comb2=Trait.comb) %>% 
-  #split strings of trait combinations and add labels
-  separate(Trait.comb2, into=paste0("trait", 1:7)) %>% 
-  mutate_at(.vars=vars(trait1:trait7),
-            .funs=~factor(., 
-                          levels=trait.labs.sign$Trait.comb, 
-                          labels=trait.labs.sign$Short_english_name)) %>% 
+#### 2.2.2 One by one - Graph of r(XY)  ####
+### list traits being significant when taken one by one
+traits.sign.alone.pa <- corXY.ci.pa %>% 
+  filter(ntraits==1) %>% 
+  filter(sign_plus==T) %>% 
+  pull(trait1)
+#[1] Leaf_Scleroph Height        GF_Nanophan   BL_Dur        SLA           LeafP         LeafCdrymass  CSR          
+#[9] LeafN         SeedLength    LDMC          GF_Hemiphan  
+
+### Plot combinations one by one
+mydata.byone <- corXY.ci.pa %>% 
+  filter(ntraits==1)%>% 
+  arrange(Coef.obs) %>% 
+  mutate(seq=1:n())
+
+(top.first <- ggplot(data=mydata.byone %>% 
+                       mutate(sign_plus=fct_rev(as.factor(sign_plus)))) + 
+    geom_segment(aes(x=q025, xend=q975, y=seq, yend=seq, 
+                     col=sign_plus)) + 
+    geom_point(aes(x=Coef.obs, y=seq), pch=15) + 
+    scale_y_continuous(breaks=mydata.byone$seq, 
+                       labels=mydata.byone$trait1, name=NULL)  +  
+    scale_x_continuous(name="RD correlation") + 
+    labs(color = "Significant") + 
+    theme_bw() + 
+    theme(panel.grid.minor = element_blank(),
+          axis.text = element_text(size=7), 
+          legend.position = c(0.8, 0.1))
+)
+
+ggsave(filename = "_pics/SXXX_TopFirstPredictors_CI_pa.png", dpi=400, 
+       width=4, height=6, plot = top.first)
+
+
+######## 2.2.4 Best - Graph of r(XY) using best combination of traits at each level of interaction N  ########
+mydata <- corXY.ci.pa %>% 
+  filter_at(.vars=vars(trait1:trait14), 
+            all_vars(. %in% traits.sign.alone.pa | is.na(.)))%>% 
+  mutate(seq=1:n())
+
+### extract best combinations of traits
+top.one.by.one <- get.best(mydata, N=1, labs=trait.labs)
+
+## Routine to extract the best combination at each level of interaction (up to max traits)
+maxtraits <- 14
+for(nn in 1:maxtraits){
+  if(nn==1) {
+    best.at.1 <- get.best(mydata, N=nn, labs=trait.labs)
+    newdata <- mydata %>% 
+      filter_at(.vars=vars(trait1:trait8),
+                .vars_predicate = any_vars(. %in% best.at.1$trait.name | is.na(.))) 
+    new.best.row <- newdata %>% 
+      filter(Trait.comb==best.at.1$Trait.comb) 
+    upper <- new.best.row$q975
+    lower <- new.best.row$q025
+    print(paste("new best at nn", nn, best.at.1$trait.name))
+    best.progr <- best.at.1$Trait.comb
+  }
+  if(nn>1){
+    better <- list()
+    better$Trait.comb <- newdata %>% 
+      filter(ntraits==nn) %>% 
+      filter(q025>upper) %>% 
+      arrange(desc(Coef.obs)) %>% 
+      slice(1) %>% 
+      pull(Trait.comb)
+    
+    if(length(better$Trait.comb>0)){
+      better$trait.name <- trait.labs %>%
+        filter(Trait.comb %in% strsplit(better$Trait.comb, split = "_")[[1]]) %>% 
+        pull(trait.name)
+      
+      newdata <- newdata %>% 
+        rowwise() %>% 
+        mutate(nmatching= sum(unlist(strsplit(Trait.comb, "_")) %in% 
+                                unlist(strsplit(better$Trait.comb, "_")),
+                              na.rm=T)) %>% 
+        ungroup() %>% 
+        filter(nmatching==nn)
+      
+      new.best.row <- newdata %>% 
+        filter(Trait.comb==better$Trait.comb) 
+      upper <- new.best.row$q975
+      lower <- new.best.row$q025
+      print(paste("new best at nn", nn, paste(better$trait.name, collapse=" ")))
+      best <- better
+      best.progr <- c(best.progr, better$Trait.comb)
+    }
+  }
+}
+
+best.4traits <- corXY.ci %>% 
+  filter(as.character(Trait.comb)==best.progr[length(best.progr)]) %>% 
+  dplyr::select(trait1:trait8) %>% 
+  mutate_all(~as.character(.))
+best.4traits <- as.character(best.4traits[1,1:4])
+
+### Create dataset with best combinations + all the one-way combinations
+mydata.best <- mydata %>% 
+  filter_at(.vars=vars(trait1:trait14), 
+            #          .vars_predicate = all_vars(. %in% best$trait.name | is.na(.))) %>% 
+            .vars_predicate = all_vars(. %in% traits.sign.alone.pa | is.na(.))) %>% 
+  #filter(ntraits <= length(best$trait.name)) %>% 
+  filter(ntraits>1) %>% 
+  filter(sign_plus==T) %>% 
   arrange(ntraits, Coef.obs) %>% 
-  dplyr::select(Trait.comb, Test, n, ntraits, everything())
+  group_by(ntraits) %>% 
+  slice(n()) %>% 
+  ungroup() %>% 
+  bind_rows(corXY.ci.pa %>% 
+              filter(run=="seq") %>% 
+              filter(ntraits==1) %>% 
+              filter(trait1 %in% traits.sign.alone.pa)) %>% 
+  arrange(ntraits, Coef.obs) %>% 
+  mutate(seq=1:n()) %>% 
+  mutate(sign_plus=factor(Trait.comb %in% best.progr))
+
+write_csv(mydata.best %>% 
+            dplyr::select(Trait.comb:sign_plus), 
+          path = "_output/SXXX_BestSolutionTiers.pa.csv")
+
+### Graph of all the best combinations with text legend
+(top.all <- ggplot(data=(mydata.best %>% 
+                           mutate(size0=.6+(as.numeric(sign_plus)-1)*.6)))   + 
+    geom_segment(aes(x=q025, xend=q975, y=seq, yend=seq, col="a", 
+                     lwd=size0)) + 
+    geom_point(aes(x=Coef.obs, y=seq), pch=15) + 
+    scale_y_continuous(breaks=mydata.best$seq, 
+                       labels=mydata.best$Trait.comb, name=NULL)  +  
+    scale_x_continuous(name="RD correlation") + 
+    scale_size_identity() +
+    theme_bw() + 
+    theme(panel.grid.minor = element_blank(),
+          axis.text = element_text(size=7), 
+          legend.position = "none"))
+
+
+tt2 <- ttheme_minimal(
+  core = list(fg_params=list(cex = .7), 
+              padding=unit(c(1, 1), "mm")),
+  colhead = list(fg_params=list(cex = .7)),
+  rowhead = list(fg_params=list(cex = .7)))
+
+(topall.leg <- cowplot::plot_grid(top.all,
+                                  tableGrob(trait.labs %>% 
+                                              mutate(Code=1:n()) %>% 
+                                              dplyr::select(Code, Trait=Short_english_name) %>% 
+                                              filter(Trait %in% traits.sign.alone.pa),
+                                            theme=tt2, rows = NULL), 
+                                  nrow=1, rel_widths=c(0.70, 0.3)))
+ggsave(filename = "_pics/SXXX_Best_AllCombinations_CI_pa.png", dpi=400, 
+       width=6, height=3, topall.leg)
+
 
 
-rm( dataFiles, dataFiles0)
 
-### merge together
-corXY.ci <- corXY.comb.ci %>% 
-  bind_rows(corXY.alone.ci %>% 
-              filter(!trait1 %in% trait.labs.sign$Short_english_name)) %>% 
-  arrange(Coef.obs)
 
-#### ____TO DO ########  
 
 
 
@@ -659,7 +791,7 @@ cor(env %>%
 
 fuzz.cor <- cor(pca.fuzz$CA$u[,1:3], scores.pca[,1:5])
 
-sink("_derived/Mesobromion/EnvFit_CWMs_env.txt")
+sink("_output/S9_EnvFit_CWMs_env.txt")
 cwms.cor
 env.cor
 fuzz.cor
@@ -880,7 +1012,7 @@ ggsave("_pics/S6_PCA_Traits_1-4_only7.png", width=10, height=5, dpi=300, PC_trai
 
 ##### 4.3b Alternative version of figS6, showing the species ####
 tmp <- as.data.frame(pca.scores[,1:4]*.2) %>% 
-  mutate(species0=traits$species0) %>% 
+  mutate(species0=rownames(traits)) %>% 
   mutate(species=species0) %>% 
   separate(species0, sep="_", into=c("Gen", "Spe")) %>% 
   mutate(Gen=substr(Gen, 1, 3)) %>% 
@@ -924,7 +1056,7 @@ ggsave("_pics/S6b_PCA_Traits_3-4_wSpecies.png", width=8, height=8, dpi=300, PCA.
 ## Create list of species labels
 write_delim(tmp %>% 
               dplyr::select(species, label=labels), 
-            path = "_derived/Mesobromion/SpeciesList.txt")
+            path = "_output/S11_SpeciesList.txt")
 
 
 
-- 
GitLab