library(tidyverse)
geometric_mean <- function(x){
exp(sum(log(x), na.rm = TRUE) / length(x))
}
yourCalculation <- function(x){
log(x / geometric_mean(x))
}
myMatrix <- tribble(
~col1 ,~col2 ,~col3
, 1 , 777 , 6
, 136 , 1 , 665
, 0 , 100 , 97) %>%
as.matrix()
t(apply(myMatrix, 1, yourCalculation))
col1 col2 col3
[1,] -2.815733 3.839707 -1.023974
[2,] 1.108508 -3.804147 2.695640
[3,] NaN Inf Inf
Важно о геометрии c означает : не рассчитывайте их так: prod(x)^(1/length(x))
. Проблема в том, что с векторами среднего размера x
вы, скорее всего, столкнетесь с границами типов, когда умножите их все, и поэтому он не будет вычисляться. Способ log()
-и-exp()
лучше.