R 如何计算图中所有节点对之间的随机游动?

R 如何计算图中所有节点对之间的随机游动?,r,R,我有一个有15000个节点的图。我想计算其中所有节点对之间的随机游动,并在其中放入一个矩阵。 我看了看R中的igraph软件包 random_walk(graph, start, steps, mode = c("out", "in", "all"), stuck = c("return", "error")) 它需要指定图中的开始节点和节点数。 我在寻找一种计算效率高的方法来计算图中所有可能的起始节点的随机游动。 有人能帮我吗 以下是我的图表的外观: 1002 DHX8 SRPK1

我有一个有15000个节点的图。我想计算其中所有节点对之间的随机游动,并在其中放入一个矩阵。 我看了看R中的igraph软件包

random_walk(graph, start, steps, mode = c("out", "in", "all"),
  stuck = c("return", "error"))
它需要指定图中的开始节点和节点数。 我在寻找一种计算效率高的方法来计算图中所有可能的起始节点的随机游动。 有人能帮我吗

以下是我的图表的外观:

1002 DHX8   SRPK1 0.5791602
1003 DHX8  CRNKL1 0.6729812
1004 DHX8   SRPK2 0.5791602
1005 DHX8    SNW1 0.8772539
1006 DHX8  SNRPD2 0.8772539

1007 DHX8 PRPF38A 0.5110222
1008 DHX8  NOTCH1 0.6168687
1009 DHX8    TAF9 0.6729812
1010 DHX8   CDC40 0.8772539
3477 SMAD4 SMURF1 0.6168687
3478 SMAD4   RAC2 0.6392732
3479 SMAD4   DAXX 0.4907872
3480 SMAD4  KPNB1 0.6168687
3481 SMAD4    HGS 0.4288047
3482 SMAD4  NAT8B 0.8772539
3483 SMAD4     AR 0.4745135
3484 SMAD4  ILKAP 0.6608392
3485 SMAD4   SKIL 0.2383471
3486 SMAD4  USP15 0.4288047
3487 SMAD4  DACH1 0.4745135

由于您没有提供任何数据,我不确定运行需要多长时间,但您可以使用
purrr
包在每个节点上循环。这将输出一个输出列表,列表中的每个元素都是
random_walk
函数的单个输出

output <- purrr::map(
  .x = 1:15000,
  .f = function(x){
    random_walk(graph, start = x, steps = 1000, 
                mode = "all", stuck = "return")
  }
)

output由于您没有提供任何数据,我不确定运行需要多长时间,但是您可以使用
purr
包在每个节点上循环。这将输出一个输出列表,列表中的每个元素都是
random_walk
函数的单个输出

output <- purrr::map(
  .x = 1:15000,
  .f = function(x){
    random_walk(graph, start = x, steps = 1000, 
                mode = "all", stuck = "return")
  }
)

output假设我正确地思考了这个问题,用一些基本函数实现这一点并不难:

#making the graph
m1<-sample(LETTERS, 15000, replace = T)
m2<-sample(LETTERS, 15000, replace = T)
w<-runif(15000, .1, 3)

graph<-data.frame(m1, m2, w, stringsAsFactors = F)
graph<-graph[graph$m1 != graph$m2,]

nodes<-list()

#parse the structure
for(node in unique(graph$m1)){
  temp <-list(target = c(), weight = c())
  df <-graph[graph$m1 == node,]

  if(nrow(df) == 0){
    next
  }

  for(i in 1:nrow(df)){
    temp$target<-c(temp$target, df[i,]$m2)
    temp$weight<-c(temp$weight, df[i,]$w)
   }

  nodes[[node]]<-temp
}

假设我正确地思考了这个问题,用一些基本函数实现这一点并不难:

#making the graph
m1<-sample(LETTERS, 15000, replace = T)
m2<-sample(LETTERS, 15000, replace = T)
w<-runif(15000, .1, 3)

graph<-data.frame(m1, m2, w, stringsAsFactors = F)
graph<-graph[graph$m1 != graph$m2,]

nodes<-list()

#parse the structure
for(node in unique(graph$m1)){
  temp <-list(target = c(), weight = c())
  df <-graph[graph$m1 == node,]

  if(nrow(df) == 0){
    next
  }

  for(i in 1:nrow(df)){
    temp$target<-c(temp$target, df[i,]$m2)
    temp$weight<-c(temp$weight, df[i,]$w)
   }

  nodes[[node]]<-temp
}

谢谢,我的图是权重图,最后,我需要一个矩阵,它的元素I,j表示节点I,j之间的随机游走距离。你想完成它并得到50+?我不知道你所说的“我的图表是重量”是什么意思。另外,我不太熟悉这种类型的图,也不完全确定我和j在这个上下文中代表什么。对不起,您可以提供一个您正在寻找的输出的示例,以及如何计算输出。请原谅我对领域知识的缺乏,但是一台计算机如何用手对一个小图进行随机行走呢?谢谢,好吧,我的图是加权的,最后,我需要有矩阵,其中的元素I,j表示节点I,j之间的随机行走距离。你想完成它并得到50+?我不知道你所说的“我的图表是重量”是什么意思。另外,我不太熟悉这种类型的图,也不完全确定我和j在这个上下文中代表什么。对不起,您可以提供一个您正在寻找的输出的示例,以及如何计算输出。请原谅我缺乏领域知识,但是一台计算机如何手动对一个小图形进行随机行走?请提供一个可复制的示例。您能否澄清:您是希望在所有节点对之间找到一个随机行走距离,还是希望为每个节点计算一个随机行走,并报告找到的节点之间的距离?2) 我们正在考虑这个图是有向的还是无向的。3) 如果您正在查找所有成对距离,那么如何报告预期的未连接节点?请提供一个可复制的示例。您是否可以澄清:您是在查找所有成对节点之间的随机行走距离,还是要计算每个节点的随机行走距离,并报告找到的节点之间的距离?2) 我们正在考虑这个图是有向的还是无向的。3) 如果您正在查找所有成对距离,那么如何报告预期的未连接节点?
many_walks(nodes, 50)