【问题标题】: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。

再次感谢您!

【问题讨论】:

    标签: r graph save nested-loops


    【解决方案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))
    

    【讨论】:

      猜你喜欢
      • 2018-06-30
      • 1970-01-01
      • 2015-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-25
      • 2016-05-03
      相关资源
      最近更新 更多