保存嵌套循环中的图表和统计信息

时间:2018-09-30 21:01:58

标签: r graph save nested-loops

我遇到了有关从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

我试图对双循环采用previous post中的方法,并且我认为在将结果保存到内部循环方面感到困惑。另外,在保存图形时,我不知道R是否可以在“ network_location_year”模式下保存名称?我以Stata的方式这样做,所以我想它可能不适用于R。

再次感谢您!

1 个答案:

答案 0 :(得分:0)

这是格式化文件名的问题。打开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))