Я считаю, что это то, что вы ищете, но, пожалуйста, поправьте меня, если это не так.
Я использовал set.seed(1)
перед тем, как определить mat
, давая следующее:
col1 col2 col3 col4
row1 26 19 58 61
row2 37 86 5 33
row3 56 97 18 66
row4 89 62 15 42
Далее я определю функцию для возврата log (foldchange + 1) двух векторов.
lfc1 <- function(a, b) log((b-a)/a + 1)
Применим функцию к каждой паре столбцов в mat
на основе пар, определенных вами вcombs
.
logfoldchanges <- apply(combs, 2, function(col_names) lfc1(mat[, col_names[1]], mat[, col_names[2]]))
Назначьте имена столбцов logfoldchanges
, чтобы показать, какая пара сравнивается.
dimnames(logfoldchanges)[[2]] <- apply(combs, 2, paste, collapse = '_')
Этоэто окончательный результат:
col1_col2 col1_col3 col1_col4 col2_col3 col2_col4 col3_col4
row1 -0.3136576 0.8023465 0.8527773 1.116004 1.1664349 0.05043085
row2 0.8434294 -2.0014800 -0.1144104 -2.844909 -0.9578397 1.88706965
row3 0.5493593 -1.1349799 0.1643031 -1.684339 -0.3850562 1.29928298
row4 -0.3615020 -1.7805862 -0.7509668 -1.419084 -0.3894648 1.02961942