如何在R中的循环内循环?
How to loop within a loop in R?
关于 SO 有几个类似的问题,但我找不到与我正在寻找的内容完全匹配的问题。
我想使用 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_graphs
和 ls_dfs
。这确实假设每个匹配中的序列。请注意,在您的示例中,您有 names(ls_dfs ) == c("one", "three", "two")
这可能不是您期望的顺序。
但是我们只是使用 vertex_attr<-
通过分配 data.frame 一次设置所有属性,因为 data.frame 实际上只是一个命名列表。
关于 SO 有几个类似的问题,但我找不到与我正在寻找的内容完全匹配的问题。
我想使用 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_graphs
和 ls_dfs
。这确实假设每个匹配中的序列。请注意,在您的示例中,您有 names(ls_dfs ) == c("one", "three", "two")
这可能不是您期望的顺序。
但是我们只是使用 vertex_attr<-
通过分配 data.frame 一次设置所有属性,因为 data.frame 实际上只是一个命名列表。