在矩阵上执行函数以生成列表输出

问题描述 投票:0回答:1

Y:(作为矩阵)(2 x 7,按行)

6 8, 2 5, 2 10, 4 10, 7 8, 4 9, 1 3

y = c(6, 8, 2, 5, 2 ,10, 4, 10, 7, 8, 4, 9, 1, 3)

Y = t(matrix(y, nrow=2))

输出(按顺序分组的元素列表):

6 8 7, 5 2 10 4 9, 1 3

我正在尝试使用下面链接的函数来实现上述输出,该函数采用两个向量 a,b 并组合在一个公共元素上。

我尝试过循环,但我在管理列表时迷失了方向,并且想知道是否有更智能的方法来实现此输出。也许使用lapply?

任何想法或前进的方向将不胜感激。

如何通过公共元素组合两个向量?

我尝试过 for(i in 1:length(Y[,1])){ ...变化但无济于事。

r list vector-search
1个回答
0
投票

这是一个图论问题 - 您可以将每个值视为图的节点,如果它们出现在同一行,则有一条边连接这些节点。您的目标是列出连接的组件(或集群)。

然后我们可以使用

igraph
包来完成工作:

components = Y |> graph_from_edgelist() |> components() 
nodes = Y |> c() |> unique() |> sort()
split(nodes, components$membership)
# $`1`
# [1] 1 3
#
# $`2`
# [1]  2  4  5  9 10
#
# $`3`
# [1] 6 7 8
© www.soinside.com 2019 - 2024. All rights reserved.