【问题标题】:Extracting elements from whole set of list in r从r中的整个列表中提取元素
【发布时间】:2015-07-12 13:35:28
【问题描述】:

下面的代码是我的 R 脚本。我想从我的 r 脚本的结果列表中获取 $r[[1]] 和 $r1:loop_results。下面是loop_results 的第一个元素的一部分看起来如何的示例。我想要一个仅显示最短路径序列(如 1 和 1 2)的列表,以及仅包含顶点序列(如 A 和 A B)的列表。

[[1]]
[[1]][[1]]
[[1]][[1]]$r
[[1]][[1]]$r[[1]]
[1] 1


[[1]][[1]]$r1
Vertex sequence:
[1] "A"


[[1]][[2]]
[[1]][[2]]$r
[[1]][[2]]$r[[1]]
[1] 1 2


[[1]][[2]]$r1
Vertex sequence:
[1] "A" "B"

这是我的 R 脚本

library(igraph)
  g <- graph.ring(5) # the graph
  V(g)$name <- LETTERS[1:5] # Vertex names
  # Define functions:
  val=function(g,i,j) { r=get.shortest.paths(g, i,j ,mode = "out"); return(r) } 
  val_all=function(r) { r1 <- V(g)[r$vpath[[1]]]; return(r1) }

  loop_results <- list()
  for (i in 1:5) {
    loop_results[i] <- list(NULL)
    for(j in 1:5) { 

      r=val(g ,i, j)
      print(r[[1]]) 
      r1 = val_all(r)
      print(r1)
      loop_results[[i]][[j]] <- list(r=r[[1]], r1=r1)
    }
  }
  loop_results

我从dput(loop_results) 得到以下输出:

  list(list(structure(list(r = list(1), r1 = structure(1, 
  class ="igraph.vs", env = <environment>)), .Names = c("r", 
  "r1")), structure(list(r = list(c(1, 2)), 
   r1 = structure(c(1, 2), 
   class = "igraph.vs", env = <environment>)), .Names = c("r", "r1")),
   structure(list(r = list(c(1, 2, 3)), r1 = structure(c(1, 2, 3), 
   class = "igraph.vs", env = <environment>)), .Names = c("r", "r1")),
    structure(list(r = list(c(1, 5, 4)), r1 = structure(c(1, 5, 4)       class = "igraph.vs",env = <environment>)), 
    .Names = c("r", "r1")), structure(list(r = list(c(1, 5)), r1 =      structure(c(1, 5),class = "igraph.vs", env = <environment>)), .Names = c("r", "r1"))) 

在这个表格中,每个剩下的4个字母也一样。 get.shortest.path 函数中的 R 只会将最短路径序列作为数字返回。如果我们有带字符串的顶点,那么我们会打印出带有最短路径结果的顶点序列名称,我在 r 脚本中使用了 val_all 函数。

我的主要目标是找到包含具有中间节点的最短路径序列的列表。就像在我的示例中,如果我想找到节点“A”和“C”之间的最短路径,结果将是 A B C。然后,我只想打印中间节点,即“B”而不是“A”和“C” ",这是我从中寻找最短路径的节点。为此,我正在考虑在 r 中使用 setdiff() 函数,对于这个函数,我需要传递一个列表,这就是为什么我想要我之前提到的列表。

【问题讨论】:

  • 我检查了我的脚本,它正在生成输出。我希望通过在显示 R 脚本之前提取上面 $r[[1]] 的结果列表元素来获得结果。我显示的 r 脚本之前的列表是一半列表。我只想要输出列表中 $r[[1]] 的结果。
  • 您好,坦率地说,我希望从我显示的一半列表中得到的输出是 [1] 1 , [1]1 2 ,就像这个序列一样。我只想从该列表中获取那些在我的半列表中命名为 [[1]][[1]]$r1 然后 [[1]][[2]]$r1 这部分我想获取的部分从列表中。
  • 很抱歉造成混乱。
  • 您可以为您使用的示例数据发布dput(yourlist) 吗?
  • @Frank 很抱歉给您带来不便。是的,我希望将列表分成两个单独的 r 数据和 r1 数据列表。是的,我只想要那种形式的结果。

标签: r list igraph


【解决方案1】:

如果您想根据数据是否与rr1 关联,将现有列表拆分为两个列表,您可以使用嵌套的lapply 调用来完成此操作:

r:

lapply(seq_along(loop_results), 
    function(x) lapply(seq_along(loop_results[[x]]), 
         function(y) loop_results[[x]][[y]][["r"]]))

r1:

lapply(seq_along(loop_results), 
    function(x) lapply(seq_along(loop_results[[x]]), 
        function(y) loop_results[[x]][[y]][["r1"]]))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-29
    • 2014-07-08
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多