Вот вариант с tidyverse
. Создайте функцию (f1
) на основе логики в коде OP для возврата list
длины 2, затем используйте ее в summarise_all
, чтобы применить функцию к каждому из столбцов набора данных
library(dplyr)
library(tidyr)
f1 <- function(x) {
H <- 0.5 * mean(x == 1)
list(list(p = mean(x == 0) + H,
q = mean(x == 2) + H))
}
df1 %>%
summarise_all(f1) %>%
unnest
# snp1 snp2 snp3
#1 0.75 0.625 0.375
#2 0.25 0.375 0.625
данные
df1 <- structure(list(snp1 = c(0L, 0L, 1L, 1L), snp2 = c(1L, 1L, 1L,
0L), snp3 = c(2L, 1L, 2L, 0L)), class = "data.frame", row.names = c(NA,
-4L))