r - 矩阵列对的自定义函数
问题描述
下午好 ,
假设我们有以下矩阵:
> dput(tnn)
structure(c(1L, 19L, 5L, 6L, 10L, 2L, 4L, 7L, 12L, 1L, 3L, 4L,
8L, 13L, 1L, 4L, 15L, 16L, 2L, 3L, 5L, 6L, 14L, 1L, 15L, 5L,
6L, 14L, 1L, 15L, 7L, 2L, 9L, 17L, 4L, 8L, 3L, 9L, 18L, 4L, 9L,
10L, 11L, 4L, 7L, 9L, 10L, 11L, 1L, 15L, 9L, 10L, 11L, 1L, 15L,
12L, 2L, 14L, 17L, 4L, 13L, 3L, 14L, 18L, 4L, 5L, 6L, 14L, 4L,
12L, 4L, 15L, 16L, 5L, 6L, 4L, 15L, 16L, 5L, 6L, 17L, 7L, 12L,
19L, 2L, 18L, 8L, 13L, 19L, 3L, 1L, 19L, 9L, 14L, 17L), .Dim = c(5L,
19L))
> tnn
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18]
[1,] 1 2 3 4 5 5 7 8 9 9 9 12 13 5 4 4 17 18
[2,] 19 4 4 15 6 6 2 3 10 10 10 2 3 6 15 15 7 8
[3,] 5 7 8 16 14 14 9 9 11 11 11 14 14 14 16 16 12 13
[4,] 6 12 13 2 1 1 17 18 4 1 1 17 18 4 5 5 19 19
[5,] 10 1 1 3 15 15 4 4 7 15 15 4 4 12 6 6 2 3
[,19]
[1,] 1
[2,] 19
[3,] 9
[4,] 14
[5,] 17
我想计算每对列的相交长度。例如 :
> intersect(tnn[,1],tnn[,19])
[1] 1 19
> length(intersect(tnn[,1],tnn[,19]))
[1] 2
为此,我尝试了:
custom_fun<-function(data,x,y){
return(length(intersect(data[,x],data[,y])))
}
outer(1:ncol(tnn),1:ncol(tnn),function(tnn,x,y) custom_fun(tnn,x,y))
但我收到以下错误:
Error in data[, x] : incorrect number of dimensions
谢谢你的帮助 !
解决方案
我们可以combn
在下面使用谎言
unlist(
combn(data.frame(tnn),
2,
FUN = function(...) setNames(length(do.call(intersect, unname(...))), toString(names(...))),
simplify = FALSE
)
)
给出命名结果,指示两列的组合
V1, V2 V1, V3 V1, V4 V1, V5 V1, V6 V1, V7 V1, V8 V1, V9
1 1 0 3 3 0 0 1
V1, V10 V1, V11 V1, V12 V1, V13 V1, V14 V1, V15 V1, V16 V1, V17
2 2 0 0 2 2 2 1
V1, V18 V1, V19 V2, V3 V2, V4 V2, V5 V2, V6 V2, V7 V2, V8
1 2 2 2 1 1 3 1
V2, V9 V2, V10 V2, V11 V2, V12 V2, V13 V2, V14 V2, V15 V2, V16
2 1 1 3 1 2 1 1
V2, V17 V2, V18 V2, V19 V3, V4 V3, V5 V3, V6 V3, V7 V3, V8
3 0 1 2 1 1 1 3
V3, V9 V3, V10 V3, V11 V3, V12 V3, V13 V3, V14 V3, V15 V3, V16
1 1 1 1 3 1 1 1
V3, V17 V3, V18 V3, V19 V4, V5 V4, V6 V4, V7 V4, V8 V4, V9
0 3 1 1 1 2 2 1
V4, V10 V4, V11 V4, V12 V4, V13 V4, V14 V4, V15 V4, V16 V4, V17
1 1 2 2 1 3 3 1
V4, V18 V4, V19 V5, V6 V5, V7 V5, V8 V5, V9 V5, V10 V5, V11
1 0 5 0 0 0 2 2
V5, V12 V5, V13 V5, V14 V5, V15 V5, V16 V5, V17 V5, V18 V5, V19
1 1 3 3 3 0 0 2
V6, V7 V6, V8 V6, V9 V6, V10 V6, V11 V6, V12 V6, V13 V6, V14
0 0 0 2 2 1 1 3
V6, V15 V6, V16 V6, V17 V6, V18 V6, V19 V7, V8 V7, V9 V7, V10
3 3 0 0 2 2 3 1
V7, V11 V7, V12 V7, V13 V7, V14 V7, V15 V7, V16 V7, V17 V7, V18
1 3 1 1 1 1 3 0
V7, V19 V8, V9 V8, V10 V8, V11 V8, V12 V8, V13 V8, V14 V8, V15
2 2 1 1 1 3 1 1
V8, V16 V8, V17 V8, V18 V8, V19 V9, V10 V9, V11 V9, V12 V9, V13
1 0 3 1 3 3 1 1
V9, V14 V9, V15 V9, V16 V9, V17 V9, V18 V9, V19 V10, V11 V10, V12
1 1 1 1 0 1 5 0
V10, V13 V10, V14 V10, V15 V10, V16 V10, V17 V10, V18 V10, V19 V11, V12
0 0 1 1 0 0 2 0
V11, V13 V11, V14 V11, V15 V11, V16 V11, V17 V11, V18 V11, V19 V12, V13
0 0 1 1 0 0 2 2
V12, V14 V12, V15 V12, V16 V12, V17 V12, V18 V12, V19 V13, V14 V13, V15
3 1 1 3 0 2 2 1
V13, V16 V13, V17 V13, V18 V13, V19 V14, V15 V14, V16 V14, V17 V14, V18
1 0 3 1 3 3 1 0
V14, V19 V15, V16 V15, V17 V15, V18 V15, V19 V16, V17 V16, V18 V16, V19
1 5 0 0 0 0 0 0
V17, V18 V17, V19 V18, V19
1 2 1
推荐阅读
- excel - 在VBA中求解具有多个未知数的方程
- javascript - 使用 Javascript 输入小于或等于的值
- python - 如何使用自定义连接器正确终止 Django 中的 MySQL/MariaDB 连接
- python - 创建一个 pandas 列,其中的值来自过滤另一列中的字符串值
- java - 为什么远程调试进入断点无效
- python - Scrapy 教程/Python 使用 VS Code 找不到蜘蛛
- vue.js - Vue 2 - ESLint + 标准 + 更漂亮
- flutter - 断言失败:第 20 行第 16 行:'经度!= null':不正确
- azure - 多个子域的 Azure 自定义域验证
- node.js - 成就/徽章系统