从嵌套循环中保存图形和统计信息
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))
【讨论】:
以上是关于从嵌套循环中保存图形和统计信息的主要内容,如果未能解决你的问题,请参考以下文章