作为本学期我正在进行的研究的一部分,我正在添加一个由以前的学生已经构建的网络,但我遇到了以前从未遇到过的错误。这段代码不是我写的,我只是在前进过程中稍微修改了一下。
所以我有这个列表
daily_networks_df
,其中包含 85953 个数据框,每个数据框看起来像这样:
这里的函数和代码生成网络的不同部分(家庭、工作和其他):
generate_el <- function(net_df){
networki = net_df[,1]
if(length(networki)>1){
# add edge in all possible pairs with prob_interact[i]
prob_interact=1/sqrt(length(networki))
ppl_pairs = combn(networki, 2)
tmp1 = rbinom(ncol(ppl_pairs), 1, prob_interact)
el_tmp = t(ppl_pairs[,tmp1==1])
return(el_tmp)
}
}
上面的这个函数针对 3 种不同的网络类型进行了一些修改,但其他 2 种非常相似,所以我没有包括在内。这是函数调用:
# DEMAND NETWORK
work_start = 2
list_el1 = lapply(daily_networks_df[1:work_start], generate_el)
gr_el1 = do.call('rbind', list_el1)
# WORK NETWORK
prob_interact = .4
list_el2 = lapply(daily_networks_df[(work_start+1):homes_start], generate_el_work)
gr_el2 = do.call('rbind', list_el2)
# HOME NETWORK
prob_interact = .8
list_el3 = lapply(daily_networks_df[(homes_start+1):length(daily_networks_df)], generate_el_homes)
gr_el3 = do.call('rbind', list_el3)
# FULL NETWORK
gr_el=rbind(gr_el1, gr_el2, gr_el3)
gr = graph_from_data_frame(gr_el, directed=FALSE, vertices=total_pop)
当我尝试执行但不知道为什么时出现此错误。有什么帮助吗?
> gr = graph_from_data_frame(gr_el, directed=FALSE, vertices=total_pop)
Error in make_empty_graph(n = 0, directed = directed) :
VECTOR_ELT() can only be applied to a 'list', not a 'closure'
这是一个老问题,但根据我在将列格式化为列表时遇到的类似错误,解决方案很可能只是更改列的数据类型。
如果
df
是一个 data.frame 或一个 tibble,并且 x1
是一个造成麻烦的列,
df$x1 <- as.character(df$x1)
查看修改后问题是否仍然存在。
(如果需要将其格式化为数字,可以使用
as.numeric()
。重点是重新分类它,这样它就不是“闭包”。)