对 from 参数中的多个名称运行 all_simple_paths()

问题描述

我有下面的节点和边数据集,我想知道我是否可以一次运行多个名称的简单路径函数,而不是一次运行一个

name<-c("Robert Zero","Amy Adams","Barry Beane","Henry Handler","Julie Jones","Charlie Cheese","Karen Klein","Lolly Landswright","Imogene Isler","David Dufresne","Frank Flaherty","Egbert English","George Graham","Molly McKee","norman Needle","Oscar Oliver","Peter Platteville","Quincy Quebec","Roger Rabbit","Steve Sweet","Tom Thompson","Victor Valentino","Ulrich Uxbridge" )
    label<-c("Robert Zero","Ulrich Uxbridge" )
    nodes<-data.frame(name,label)
    
    
    from<-c("Robert Zero","Robert Zero","Ulrich Uxbridge","Tom Thompson"     )
    to<-c( "Amy Adams","Roger Rabbit"   )
    
    edges<-data.frame(from,to)
    
    
    #Combine them in order to create the graph object
    library(igraph)
    library(dplyr)
    
    gph <- graph_from_data_frame(edges,directed=TRUE,vertices=nodes)
    
    #Create the simple paths asp 
    asp <- all_simple_paths(gph,"Robert Zero")
    asp2 <- all_simple_paths(gph,"Amy Adamas","Robert Zero")

相反,我想要类似的东西:

asp <- all_simple_paths(gph,c("Steve Sweet","Amy Adams"),"Robert Zero")

这会立即给我 12 条路径

解决方法

sapply试试all_simple_paths

asp <- unlist(
  sapply(
    c("Steve Sweet","Amy Adams"),all_simple_paths,graph = gph,to = "Robert Zero"
  ),recursive = FALSE
)

给出

> asp
$`Steve Sweet1`
+ 4/23 vertices,named,from 6674620:
[1] Steve Sweet  Tom Thompson Roger Rabbit Robert Zero

$`Steve Sweet2`
+ 4/23 vertices,from 6674620:
[1] Steve Sweet      Tom Thompson     Victor Valentino Robert Zero

$`Steve Sweet3`
+ 5/23 vertices,from 6674620:
[1] Steve Sweet     Ulrich Uxbridge Barry Beane     Henry Handler
[5] Robert Zero

$`Steve Sweet4`
+ 5/23 vertices,from 6674620:
[1] Steve Sweet     Ulrich Uxbridge Barry Beane     Charlie Cheese
[5] Robert Zero

$`Steve Sweet5`
+ 5/23 vertices,from 6674620:
[1] Steve Sweet     Ulrich Uxbridge Barry Beane     Imogene Isler
[5] Robert Zero

$`Steve Sweet6`
+ 5/23 vertices,from 6674620:
[1] Steve Sweet       Ulrich Uxbridge   Barry Beane       Peter Platteville
[5] Robert Zero

$`Steve Sweet7`
+ 5/23 vertices,from 6674620:
[1] Steve Sweet     Ulrich Uxbridge Barry Beane     Roger Rabbit
[5] Robert Zero

$`Amy Adams1`
+ 4/23 vertices,from 6674620:
[1] Amy Adams     Barry Beane   Henry Handler Robert Zero

$`Amy Adams2`
+ 4/23 vertices,from 6674620:
[1] Amy Adams      Barry Beane    Charlie Cheese Robert Zero

$`Amy Adams3`
+ 4/23 vertices,from 6674620:
[1] Amy Adams     Barry Beane   Imogene Isler Robert Zero

$`Amy Adams4`
+ 4/23 vertices,from 6674620:
[1] Amy Adams         Barry Beane       Peter Platteville Robert Zero

$`Amy Adams5`
+ 4/23 vertices,from 6674620:
[1] Amy Adams    Barry Beane  Roger Rabbit Robert Zero