将网络分析动态应用于 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))))
我有一个文件夹 "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))))