Если вы сделаете:
do.call("cbind", lapply(seq_along(dfn), function(y) apply(dfn, 2, function(x) dfn[[y]]/x)))
Вы получите массив 15 * 324, с 18 столбцами, представляющими все столбцы, разделенные на первый столбец, 18 столбцами, разделенными на второй столбец, и т. Д. .
Вы можете отслеживать их, пометив столбцы следующими именами:
apply(expand.grid(names(dfn), names(dfn)), 1, paste, collapse = " / ")