繁体   English   中英

如何在R中循环内循环?

[英]How to loop within a loop in R?

对此也有一些类似的问题,但我找不到与我要找的东西完全匹配的东西。

我想使用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属性。

似乎这可能是您需要的

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实际上只是一个命名列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM