R :: Для всех комбинаций столбцов рассчитать изменение кратности журнала для каждой строки - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть такая матрица:

mat <-  matrix(sample(0:100, 16), ncol=4)
dimnames(mat) <- list(rownames(mat, do.NULL = FALSE, prefix ="row"),
                      colnames(mat, do.NULL = FALSE, prefix = "col"))

Я хотел бы рассчитать изменение логарифмического сгиба между всеми комбинациями столбцов для каждой строки.Я могу найти все возможные комбинации столбцов, используя:

combs <- combn(colnames(mat), 2)

Но затем я хочу создать фрейм данных со значениями log (foldchange + 1) для каждой строки, где столбцы, которые названы сравнением.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 06 декабря 2018

Я считаю, что это то, что вы ищете, но, пожалуйста, поправьте меня, если это не так.

Я использовал 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...