From d69aa8f42209e0eae01d366d1971beb61ab8e7aa Mon Sep 17 00:00:00 2001
From: Midoux Cedric <cedric.midoux@irstea.fr>
Date: Tue, 21 Apr 2020 17:15:52 +0200
Subject: [PATCH] CLR transfo (retours OC)

---
 panels/dataInput.R | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/panels/dataInput.R b/panels/dataInput.R
index 932f436..5a6a55b 100644
--- a/panels/dataInput.R
+++ b/panels/dataInput.R
@@ -300,13 +300,13 @@ output$transformFun <- renderText({
                          sep = "\n"),
           "sqrt" = "data_sqrt <- transform_sample_counts(data, sqrt)",
           "clr" = paste("gm_mean <- function(x, na.rm=TRUE) {",
-                        "  exp(sum(log(x[x > 0 & !is.na(x)]), na.rm=na.rm) / length(x))",
-                        "  }",
-                        "clr <- function(x, base=2) {",
-                        "  x <- log((x / gm_mean(x)), base)",
-                        "  x[!is.finite(x) | is.na(x)] <- 0.0",
-                        "  return(x)",
+                        "  return(exp(mean(log(x), na.rm=na.rm)))",
                         "}",
+                        "clr <- function(x, base=exp(1)) {",
+                        "  x <- x+1",
+                        "  x <- log(x/gm_mean(x), base)",
+                        "  return(x)",
+                        "}", 
                         "data_clr <- transform_sample_counts(data, clr)",
                         sep = "\n")
           )
@@ -328,11 +328,11 @@ observeEvent(input$transformData, {
               },
               "clr" = {
                 gm_mean <- function(x, na.rm=TRUE) {
-                  exp(sum(log(x[x > 0 & !is.na(x)]), na.rm=na.rm) / length(x))
+                  return(exp(mean(log(x), na.rm=na.rm)))
                 }
-                clr <- function(x, base=2) {
-                  x <- log((x / gm_mean(x)), base)
-                  x[!is.finite(x) | is.na(x)] <- 0.0
+                clr <- function(x, base=exp(1)) {
+                  x <- x+1
+                  x <- log(x/gm_mean(x), base)
                   return(x)
                 }
                 physeq(transform_sample_counts(physeq(), clr))
-- 
GitLab