如何在R中循环?

时间:2017-12-12 21:58:07

标签: r loops igraph purrr

对此有几个类似的问题,但我无法找到与我正在寻找的完全匹配。

我想使用igraph's set_vertex_attr函数为图表列表设置一些顶点属性。我想将split data_frame中的所有变量作为属性,并使用变量名作为顶点属性名。我的方法是在循环中使用循环,但这对我来说太先进了,我遇到了障碍。这是我的代码:

library(tidyverse) #to keep it tidy
library(igraph) #for graphs

list_graphs <- list(graph.star(5),
                    graph.star(5),
                    graph.star(5))

df <- data_frame(name = c(rep('one',5),
                                rep('two',5),
                                rep('three',5)),
           x_vary = sample(1:1000,15),
           y_vary = sample(1:1000,15))

ls_dfs <- split(df,f= df$name)

for(i in seq_along(list_graphs)){
  for(j in seq_along(ls_dfs)){

     set_vertex_attr(graph = list_graphs[[i]],
                name = names(df[i]),
                value = ls_dfs[[i]][[j]])

  }
}

我正在寻找的输出是list_graphs中的每个图形,以便从data_frame获取以下顶点属性名称和属性。

1 个答案:

答案 0 :(得分:1)

似乎这可能是你需要的

map2(list_graphs, ls_dfs, function(g, attr) {vertex_attr(g)<- attr; g})

我们使用来自tidyverse的map2一起走过list_graphsls_dfs。这确实假设每个中的序列匹配。请注意,在您的示例中,您有names(ls_dfs ) == c("one", "three", "two"),这可能不是您期望的顺序。

但是我们只需使用vertex_attr<-通过分配data.frame来一次设置所有属性,因为data.frame实际上只是一个命名列表。