首页 > 解决方案 > 从嵌套循环中保存图形和统计信息

问题描述

我遇到了关于从 R 中的嵌套循环中保存图表和统计数据的问题。我得到的是社交网络的不平衡面板数据。在下面的示例中,从 2001 年到 2003 年,它在 3 个位置具有网络连接。我的目标是生成网络图以及每个位置每年的一些统计数据(因此示例中有 9 个图表和 9 个 SNA 统计数据)。但是我对事先设置结果容器感到困惑,尤其是当循环嵌套时。如果有人可以提供帮助,我将不胜感激。

> # import file 
> el <- read.csv(file.choose(), header = TRUE )  
> print(el)                                   # example data
   bname sname year loc
1      a     b 2001   1
2      a     c 2001   1
3      a     b 2002   1
4      b     c 2002   1
5      b     e 2002   1
6      e     a 2003   1
7      b     a 2003   1
8      a     c 2003   1
9      b     e 2001   2
10     a     c 2002   2
11     a     b 2002   2
12     b     c 2002   2
13     c     e 2002   2
14     c     e 2003   2
15     b     e 2003   2
16     a     b 2003   2
17     a     b 2001   3
18     a     c 2001   3
19     a     e 2001   3
20     a     d 2001   3
21     a     b 2002   3
22     b     c 2002   3
23     b     c 2003   3
> # Import objects
> loc <- as.vector(unique(el$loc))
> year <- as.vector(unique(el$year))
> start <- 2001
> end <- 2003

> # Result container
> mylist <- vector('list', length(loc))       # final list
> acc <- paste("")                            # vector for avg. cluster coef.
> sna <- cbind(year, acc)                     # matrix for each location

> # Loop, i for location, acc. as example
> for (i in unique(loc)) {
+   
+   for (j in start:end) {
+     el_s <- subset(el, loc==i & year==j)    # pick subsample                  
+     edge <- el[order(el_s$bname, el_s$sname),]
+     nw <- graph_from_data_frame(d= el_s, directed = T)
+     
+     # graph plotting 
+     png("network"i""j".jpg")                        
 Error: unexpected symbol in:
 "    # graph plotting 
    png("network"i"                           # Error here -- Can the name be save in "network_i_j" mode?
>     plot(nw)
>     dev.off()
null device 
          1 
+     
+     # SNA statistics
+     sna[j,"acc"] <- transitivity(nw, type = "average") # Error here
+     
+   }  
+   
+   mylist[[i]] <- sna
+ }
Error in `[<-`(`*tmp*`, j, "acc", value = transitivity(nw, type = "average")) : 
  subscript out of bounds

我试图将一篇文章中的方法用于双循环,我想我在将结果保存在内循环方面感到困惑。另外,保存图的时候,不知道R能不能在“network_location_year”模式下保存名字?我以Stata的方式做到了这一点,所以我想它可能不适用于R。

再次感谢高级!

标签: rgraphsavenested-loops

解决方案


这是格式化文件名的问题。打开 png 设备时,您应该使用

png(sprintf("network_%s_%s.png", i, j))

反而。

而对于这条线,

sna[j,"acc"] <- transitivity(nw, type = "average")

你得到下标超出范围,因为 j 在 2001 和 2003 之间,而不是 1 到 3。你会想要

sna[sna$year == j,"acc"] <- transitivity(nw, type = "average")

反而。

顺便说一句,如果你想要 jpg 而不是 png,你可以使用

jpeg(sprintf("network_%s_%s.jpg", i, j))

推荐阅读