Вам нужно повторить.Этот метод, например, дает вам матрицу значений p, аналогичную тому, как cor
дает вам значение корреляции для каждой комбинации столбец-столбец.
myfunc <- function(i,j) mapply(function(a,b) cor.test(mtcars[[a]], mtcars[[b]])$p.value, i, j)
mt <- mtcars[1:5]
outer(seq_len(ncol(mt)), seq_len(ncol(mt)), myfunc)
# [,1] [,2] [,3] [,4] [,5]
# [1,] 0.000000e+00 6.112687e-10 9.380327e-10 1.787835e-07 1.776240e-05
# [2,] 6.112687e-10 0.000000e+00 1.802838e-12 3.477861e-09 8.244636e-06
# [3,] 9.380327e-10 1.802838e-12 0.000000e+00 7.142679e-08 5.282022e-06
# [4,] 1.787835e-07 3.477861e-09 7.142679e-08 0.000000e+00 9.988772e-03
# [5,] 1.776240e-05 8.244636e-06 5.282022e-06 9.988772e-03 0.000000e+00
или даже лучше, с именами (спасибо @RyanD):
outer(mt, mt, Vectorize(function(a, b) cor.test(a, b)$p.value))
# mpg cyl disp hp drat
# mpg 0.000000e+00 6.112687e-10 9.380327e-10 1.787835e-07 1.776240e-05
# cyl 6.112687e-10 0.000000e+00 1.802838e-12 3.477861e-09 8.244636e-06
# disp 9.380327e-10 1.802838e-12 0.000000e+00 7.142679e-08 5.282022e-06
# hp 1.787835e-07 3.477861e-09 7.142679e-08 0.000000e+00 9.988772e-03
# drat 1.776240e-05 8.244636e-06 5.282022e-06 9.988772e-03 0.000000e+00
Если вам нужно сравнить только один столбец со всеми остальными, то:
outer(1, seq_len(ncol(mt)), myfunc)
# [,1] [,2] [,3] [,4] [,5]
# [1,] 0 6.112687e-10 9.380327e-10 1.787835e-07 1.77624e-05
outer(mt[1], mt, Vectorize(function(a, b) cor.test(a, b)$p.value))
# mpg cyl disp hp drat
# mpg 0 6.112687e-10 9.380327e-10 1.787835e-07 1.77624e-05
... но для применения этого в качестве столбца в вашем data.frame
не имеет смысла: добавление столбца предполагает, что (скажем) первое возвращаемое значение p будет связано с другими значениями в этой первой строке, определенно не так.