将列表转换为边列表的通用方法

Generic method for converting a list to an edgelist

假设我有一个字符串列表:

list <- c("john", "carl", "suzanne")

因为它们出现在同一个列表中,所以我在社交网络上假设它们是相互关联的。为了能够将此组转换为图形,我需要将其添加到边列表中:

from to
john carl
carl suzanne
suzanne john

然而,该组可能包含 1 到无穷多个字符串。我如何构造一个将这样的字符串列表转换为边缘列表的函数?

似乎我可以自发地将每个字符串分配给一个通用对象(例如,namename2name3),然后创建一个矩阵,如下所示:

name1 = "john"
name2 = "carl"
name3 = "suzanne"
matrix(data = c(name1, name2, name2, name3, name1, name3), byrow=TRUE,
ncol=2)

     [,1]   [,2]     
[1,] "john" "carl"   
[2,] "carl" "suzanne"
[3,] "john" "suzanne"

但是,此解决方案的扩展性不是很好。如何制定可扩展的解决方案?

您似乎在寻找 combn

t(combn(list, 2))
##      [,1]   [,2]     
## [1,] "john" "carl"   
## [2,] "john" "suzanne"
## [3,] "carl" "suzanne"