从嵌套循环中保存图形和统计信息

Posted

技术标签:

【中文标题】从嵌套循环中保存图形和统计信息【英文标题】:Save graphs and statistics from nested loops 【发布时间】:2018-09-30 21:01:58 【问题描述】:

我遇到了关于从 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】:

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

【讨论】:

以上是关于从嵌套循环中保存图形和统计信息的主要内容,如果未能解决你的问题,请参考以下文章

如何从 C# 中的嵌套循环写入多维数组?

使用JavaScript循环嵌套解决各种图形

JS中循环嵌套六大经典例题+六大图形题,你知道哪几个?

循环嵌套-打印不定长特殊*号图形

for循环嵌套

Python入门之控制结构 - 循环结构——第3关:循环嵌套