将列表转换为边列表的通用方法
Generic method for converting a list to an edgelist
假设我有一个字符串列表:
list <- c("john", "carl", "suzanne")
因为它们出现在同一个列表中,所以我在社交网络上假设它们是相互关联的。为了能够将此组转换为图形,我需要将其添加到边列表中:
from to
john carl
carl suzanne
suzanne john
然而,该组可能包含 1 到无穷多个字符串。我如何构造一个将这样的字符串列表转换为边缘列表的函数?
似乎我可以自发地将每个字符串分配给一个通用对象(例如,name
、name2
和 name3
),然后创建一个矩阵,如下所示:
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"
假设我有一个字符串列表:
list <- c("john", "carl", "suzanne")
因为它们出现在同一个列表中,所以我在社交网络上假设它们是相互关联的。为了能够将此组转换为图形,我需要将其添加到边列表中:
from to
john carl
carl suzanne
suzanne john
然而,该组可能包含 1 到无穷多个字符串。我如何构造一个将这样的字符串列表转换为边缘列表的函数?
似乎我可以自发地将每个字符串分配给一个通用对象(例如,name
、name2
和 name3
),然后创建一个矩阵,如下所示:
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"