如何解决在随机网络的 list() 的嵌套循环中使用 lapply 的错误消息
我正在制作随机网络列表并生成其信息的日期框架。我在嵌套的代码循环中执行此操作。我的代码没有完成,当我在我的 .RMD 块中停止运行时(在 RStudio 崩溃之后),我收到以下错误消息:
no loop for break/next,jumping to top level
2.
FUN(X[[i]],...)
1.
lapply(random_nws,cluster_optimal)
这是相同格式的代码示例。
random_nw_metrics <- data.frame( #to fill in
# Community
"count_communities" = NA,"ave_membership" = NA,"sd_membership" = NA,"modularity" = NA,# General Network
# "assortativity" = NA,"ave_distance" = NA,"degree_ave" = NA,"degree_sd" = NA,"density" = NA,"diameter" = NA,"reciprocity" = NA,"transitivity" = NA
)
for (i in 1:180){ # it was "i in 1:nrow(df)",but that's not useful to you
set.seed(1)
random_nws <- list()
for (j in seq_len(1000L)) {
Start = sample(15,200,replace=TRUE) # "15" and "20" change based on values from the df
End = sample(15,replace=TRUE)
df = data.frame(Start,End)
ass.label <- data.frame("node" = 1:15,"type" = 0) # for assortativity labels
ass.label$type <- +(match(ass.label$node,sample(x = 15,size = 5) ) > 0)
ass.label[c("node","type")][is.na(ass.label[c("node","type")])] <- 0
random_nws[[j]]<- graph_from_data_frame(df,vertices = ass.label,directed=TRUE)
}
random_cs <- lapply(random_nws,cluster_optimal)
nw <- random_nws[[i]]
random_nw_metrics <- rbind(random_nw_metrics,data.frame(
# Community
"count_communities" = mean(sapply(random_cs,function(x) mean(length(x)))),"ave_membership" = mean(sapply(random_cs,function(x) mean(membership(x)))),"sd_membership" = mean(sapply(random_cs,function(x) sd(membership(x)))),"modularity" = mean(sapply(random_cs,function(x) mean(modularity(x)))),# General Network
# "assortativity" = mean(sapply(random_nws,function(x) mean(assortativity(x,V(x)$Type,directed = T)))),# this isn't working ignore it for now
"ave_distance" = mean(sapply(random_nws,function(x) mean(mean_distance(x)))),"degree_ave" = mean(sapply(random_nws,function(x) mean(degree(x)))),"degree_sd" = mean(sapply(random_nws,function(x) sd(degree(x)))),"density" = mean(sapply(random_nws,function(x) mean(edge_density(x)))),"diameter" = mean(sapply(random_nws,function(x) mean(diameter(x)))),"reciprocity" = mean(sapply(random_nws,function(x) mean(reciprocity(x)))),"transitivity" = mean(sapply(random_nws,function(x) mean(transitivity(x))))
))
}
我将不胜感激,我不知道该怎么做,因为我的一些措施需要社区。p>
解决方法
我认为您的代码没有任何问题。你可以试试下面的代码,这样可能更有效地得到想要的输出
nw_metrics <- replicate(180,{
random_nws <- replicate(
1000L,{
Start <- sample(15,200,replace = TRUE)
End <- sample(15,replace = TRUE)
df <- data.frame(Start,End)
ass.label <- data.frame("node" = 1:15,"type" = 0) # for assortativity labels
ass.label$type <- +(match(ass.label$node,sample(x = 15,size = 5)) > 0)
ass.label[c("node","type")][is.na(ass.label[c("node","type")])] <- 0
list(graph_from_data_frame(df,vertices = ass.label,directed = TRUE))
}
)
random_cs <- lapply(random_nws,cluster_optimal)
community <- rowMeans(
sapply(
random_cs,function(x) {
mbx <- membership(x)
c(
count_communities = mean(length(x)),ave_membership = mean(mbx),sd_membership = sd(mbx),modularity = mean(modularity(x))
)
}
)
)
generalnetwork <- rowMeans(
sapply(
random_nws,function(x) {
degx <- degree(x)
c(
ave_distance = mean(mean_distance(x)),degree_ave = mean(degx),degree_sd = sd(degx),density = mean(edge_density(x)),diameter = mean(diameter(x)),reciprocity = mean(reciprocity(x)),transitivity = mean(transitivity(x))
)
}
)
)
list(c(community,generalnetwork))
})
random_nw_metrics <- data.frame(do.call(rbind,nw_metrics))
输出看起来像
count_communities ave_membership sd_membership modularity ave_distance
1 3.3 2.220000 0.9148421 0.2031175 1.421429
2 3.6 2.220000 1.0218422 0.1942025 1.403333
3 3.6 2.360000 0.9869272 0.2092750 1.415714
4 3.3 2.060000 0.9003820 0.1961875 1.400000
5 3.7 2.233333 1.0169882 0.1933500 1.413810
degree_ave degree_sd density diameter reciprocity transitivity
1 26.66667 4.702093 0.952381 2.4 0.4487476 0.8116972
2 26.66667 4.827348 0.952381 2.2 0.4631853 0.8439533
3 26.66667 5.058985 0.952381 2.0 0.4384173 0.8207699
4 26.66667 4.833340 0.952381 2.2 0.4490952 0.8464840
5 26.66667 4.816635 0.952381 2.2 0.4396883 0.8309121
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。