簡體   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