我有一个 n x m 矩阵,可以这样说:
df =
1 0 2 1
1 2 3 2
3 3 1 0
2 2 2 1
1 2 3 1
我想在所有列上运行一个函数,例如 myfunct
,它将对每一列求和,然后对每对列求和,自包含。
16 17 19 13
17 18 20 14
19 20 22 16
13 14 16 10
有没有一种简单的方法可以将 myfunct
应用于矩阵以得到相应的方阵?更一般地说,如果我有一个包含 N 个事物的列表,是否有一种简单的方法可以在该列表中的所有 i、j 对之间运行一个双变量函数,并输出为方矩阵?
最佳答案
这是一个快速函数:
myfun <- function(df){
z <- colSums(df)
matrix(rowSums(expand.grid(z, z)), ncol = ncol(df))
}
它首先将 colSums
作为 z
。然后我们使用 expand.grid
将 z
的所有组合取到 z
并取 rowSums
。输出被强制转换为具有正确列数的矩阵。
myfun(df)
[,1] [,2] [,3] [,4]
[1,] 16 17 19 13
[2,] 17 18 20 14
[3,] 19 20 22 16
[4,] 13 14 16 10
关于R : how to run a command between every pair in a list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32773277/