R : how to run a command between every pair in a list

标签 r matrix

我有一个 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.gridz 的所有组合取到 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/

相关文章:

r - Pyspark列填充与计算

r - 如何添加不同大小和颜色的ggplot2字幕?

r - 使用 R 绘图下拉菜单选择变量并继续使用颜色变量作为跟踪

matrix - 使用 Keras 了解 LSTM 中的 input_shape 参数

c++ - 每当我运行 C++ 中的乘法矩阵代码时,它总是崩溃。不知道为什么

r - 将数据从长数据更改为矩阵

r - 将重复值放入列中

r - 在 R/Tidyeval 中的 RHS 上使用类似胶水的结构

matrix - pyspark mllib IndexedRowMatrix类型如何通过索引获取项目

c - 如何解决Linux内核中C中的错误 "initializer element is not constant"