我想使用软件包“ igraph”从多个社区检测指标输出中创建一个数据框。但是,当我使函数执行此操作时,我仅获得返回的输出数据帧,原始数据帧未更改且仍然为空。我该如何实现?
首先,我制作了一个空数据框,其中包含3列,1个字符列和两个数字列。我想将每种算法的结果附加到此数据框。我使用dplyr通过自制的“制造商”功能进行了尝试。
df_com_det_1 <- data.frame(algorithm=character(),groups=numeric(0)
,mod=numeric(0),stringsAsFactors=FALSE)
maker <- function(dataframe, methodused){
dataframe %>%
summarise(algorithm = methodused$algorithm,
groups = length(unique(methodused$membership)),
mod = methodused$modularity) %>%
bind_rows(dataframe, .)
}
maker(df_com_det_1, label_propagation_unweighted)
我希望在控制台中看不到任何输出,但确实希望看到更改后的df_com_det_1数据框,其中添加了以下行(现在仅在控制台中返回):
> maker(df_com_det_1, label_propagation_unweighted)
algorithm groups mod
1 label propagation 3 0.4534836
我怎么能做到这一点?
答案 0 :(得分:2)
当您调用函数时,您并未将结果分配给任何东西。尝试
df_com_det_1<-maker(df_com_det_1,label_propagation_unweighted)
使用数据框调用函数时,会在该函数内部的新环境中创建该数据框的副本,并且对该数据框所做的所有更改都不会反映在外部环境中。
有一种方法可以在函数中(使用<<-
在全局环境中进行更改,但实际上不建议这样做。更好的解决方案是按照我上面的建议进行操作,只需将函数的结果分配回数据框中即可。