我想为for循环中的每个迭代分配并存储一个新值

时间:2019-03-27 04:59:28

标签: r loops for-loop networking

我想为for循环的每次迭代分配一个新值并将其存储到R环境中,如标题中所述。

csg<-clusters(suba)

csgs1<-subgraph(suba, csg$membership==1)

sg1<-cluster_spinglass(csgs, weights=E(a)$weight)

因此,给定一些igraph对象(suba),我想创建sg1,sg2,...,sg31。我不想经过31行以上的两行代码,所以我尝试了for循环?但是我不知道如何每次都存储一个新值。

for (k in 1:seq_along(length(csg$csize))){

  csgs[k] <- subgraph(suba, csg$membership==k)

  sg [k] <-cluster_spinglass(csgs[k] , weights=E(a)$weight)

  }

很明显,在这种情况下,方括号不起作用,但是我找不到如何做到这一点。

理想情况下,我想将sg1,sg2等保存到R环境中,以便可以将它们用作网络suba的组。由于我的代码无法正常工作,因此目前无法获得结果。不过,它可以单独工作,为csgs1创建一个子图,为sg1创建一个列表。

2 个答案:

答案 0 :(得分:1)

如果您确实想创建多个变量,则可以按照以下步骤进行操作:

for (k in seq_along(csg$csize)){
  assign(paste0("csgs",k), subgraph(suba, csg$membership==1))
  assign(paste0("sg",k), cluster_spinglass(get(paste0("csgs",k)), weights=E(a)$weight))
}

这将为您创建csgs1csgs2csgs3等,以及sg1sg2sg3等,因此您可以稍后在代码中直接使用它们。

希望有帮助。

答案 1 :(得分:0)

最好将内容存储为列表,而不是用多个对象充斥环境。

但是,您可以使用assign创建一个新对象并分配一个值,例如:

assign("a", 10) #Create an object "a" and assign value 10
a
[1] 10