将网络分析动态应用于 r 中的文本文件列表

Dynamically apply network analysis to list of text files in r

我有一个文件夹 "Disintegration T1",其中包含大约 50 个如下所示的文本文件,其中每个文本文件名对应一个团队:

> 1
0  0  0  0  1
1  0  0  0  1
0  1  0  0  1
0  0  0  0  0
1  1  1  1  0
> 2
0  1  1  0  1
0  0  1  1  1
1  1  0  1  1
1  1  1  0  1
0  0  0  0  0
> 3
0  1  1  1  
1  0  0  0  
0  0  0  0  
1  0  0  0

我正在尝试对所有文本文件自动执行 运行 网络分析过程,其中包括以下功能:

library(sna)
centralization(x,betweenness)
centralization(x,degree)
centralization(x,evcent)
gden(x)

我遇到的一个问题是这些分析必须在矩阵上执行,并且 R 默认将这些文件作为数据帧读取。一般来说,我在构建代码时也遇到了麻烦。我的目标是自动化该过程,以便将结果添加到数据框中,其中每一行对应于每个文本文件,每一列对应于执行的分析,因此最终结果如下所示:

> results
   gden   betweenness   degree   evcent
1   #          #           #        #
2   #          #           #        #
3   #          #           #        #

(数字指的是对应的分析结果)我试过以下都不行:

networkanalysis<-function(x){
gden<-gden(x)
centb<-centralization(x,betweenness)
centd<-centralization(x,degree)
cente<-centralization(x,evcent)
return(gden)
return(centb)
return(centd)
return(cente)
}
out<-do.call("rbind",lapply(dir(),function(x)networkanalysis(data=as.matrix(read.table(x)))))

我的工作目录设置为包含文本文件的文件夹。

一个函数只能 return 一个结果,因此将这些值包装在 data.frame 和 return 和 data.frame 中。

networkanalysis <- function(x) {
    data.frame(
        gden=gden(x),
        centb=centralization(x,betweenness),
        centd=centralization(x,degree),
        cente=centralization(x,evcent)
    )
}

然后,对每个文件调用您的函数,rbind 结果与 do.call

out <- do.call(rbind, lapply(dir(), function(x) networkanalysis(as.matrix(read.table(x)))))

编辑

要将文件名添加为行名,

out <- do.call(rbind, lapply(dir(), function(x)
    `rownames<-`(networkanalysis(as.matrix(read.table(x))), basename(x))))