gpt4 book ai didi

r - 对 n*m 矩阵的所有列组合进行函数运算,生成 m*m 结果

转载 作者:行者123 更新时间:2023-12-01 18:27:49 26 4
gpt4 key购买 nike

假设我有一个函数,它接受两个向量并返回一个整数,例如一个向量中也存在另一个向量中的元素数量。喜欢:

f <- function(v1,v2)sum(v1 %in% v2)

如何将该函数应用于 n*m 矩阵中 m 列的所有成对组合。

set.seed(1)
m <- replicate(3, sample(letters[1:10], size = 5))
dimnames(m) <- list(NULL, paste0('c', 1:ncol(m)))

现在,

> m
[,1] [,2] [,3]
[1,] "c" "i" "c"
[2,] "d" "j" "b"
[3,] "e" "f" "f"
[4,] "g" "e" "j"
[5,] "b" "a" "e"

并在前两列上取函数:

> f(m[,1], m[,2])
[1] 1 #'e' is shared.

如何对所有列组合执行此操作?结果可能是一个 m*m 矩阵(其中结果围绕对角线对称),或者,它可能是一个长格式数据框,其中包含 v1、v2 和函数结果的列(例如,第一行将是 c1c23 )

我尝试研究函数 outerexpand.grid 但找不到解决方案。

最佳答案

sapply(1:3, function(i) sapply(1:3, function(j) f(m[,i], m[,j])))
# [,1] [,2] [,3]
#[1,] 5 1 3
#[2,] 1 5 3
#[3,] 3 3 5

或者以下输出可能更友好

sapply(data.frame(m), function(x1) sapply(data.frame(m), function(x2) f(x1, x2)))
# c1 c2 c3
#c1 5 1 3
#c2 1 5 3
#c3 3 3 5

关于r - 对 n*m 矩阵的所有列组合进行函数运算,生成 m*m 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44709440/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com