【问题标题】:Using loops to generate random graphs and adjacency matrix in R在 R 中使用循环生成随机图和邻接矩阵
【发布时间】:2020-10-02 17:15:04
【问题描述】:

我是 R 新手,需要一些帮助来编写正确的代码。

我想生成 Erdos Renyi 随机图并计算图的聚类系数。

这个模型的随机图将有 n 个顶点(在我的例子中,n = 5)。并且2个顶点之间是否存在边由概率p确定。我有一个包含多行和多列的大型 csv 文件,其中一列包含我要使用的概率值。

对于每个概率值,我想编写 R 来读取它并生成 100 个随机图并获得 100 个随机图的邻接矩阵。

我可以使用此代码使用特定概率值 (p=0.39) 获得 100 个图的邻接矩阵

 adjacency <- replicate(100,get.adjacency(erdos.renyi.game(5,0.39,type="gnp"),sparse = FALSE))

我正在尝试找到一种方法让 R 遍历我的 csv 文件并使用名为“ProbabilityValue”的列中的每一行作为概率值。

这是我目前所拥有的

for (i in 1:nrow(data)){
all.adjacency[i] <- 
replicate(100,get.adjacency(erdos.renyi.game(5,data[i,"ProbabilityValue"],type="gnp"), sparse = FALSE))
}

但我收到一条警告消息,提示“要替换的项目数不是替换长度的倍数”,并且输出全为零。

为了获得聚类,我安装了DirectedClustering 包,它接受邻接矩阵并将聚类作为输出。该函数称为ClustBCG()

我以adjacency 作为输入运行这行代码以获取聚类

ClustBCG(adjacency,"undirected")

我收到一条错误消息,提示 adjacency 不是有效的矩阵对象。我知道将“邻接”作为输入是不正确的,但我不知道有任何其他输入方式。

对于“ProbabilityValue”列中的每个概率值,我想获取 100 个随机生成的图的邻接矩阵。然后将 100 个邻接矩阵中的每一个读入函数ClustBCG(),得到 100 个聚类值作为输出。但我不确定从哪里开始。您能否帮助我或指导我在 R 中使用适当的功能?

(我很抱歉问了一个很长的问题,但我很迷茫)

非常感谢任何帮助

谢谢

【问题讨论】:

    标签: r loops for-loop matrix graph


    【解决方案1】:

    我没有可用的DirectedClust,所以我无法运行您的代码。但是如果adjacency是一个矩阵对象的列表,那么

    library(tidyverse)
    results <- map(adjacency, ~ ClustBCG(.x,"undirected")
    

    应该可以。

    【讨论】:

    • 我认为问题在于replicate 的使用,因为它返回一个矩阵而不是矩阵列表;所以我认为lapply更好地生成数据
    • 我认为问题中有一个错字:包名是DirectedClustering。我正在尝试编辑,但收到“建议的编辑队列已满”。 cran.r-project.org/web/packages/DirectedClustering/…