我遇到了有关从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。
再次感谢您!
答案 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))