R 基于时间段的子集网络构建
我对这里的一切都不熟悉。我试图投入更多的精力使我的代码可读。我正在编写为多个文件运行函数的代码。我有100多个文件,每个文件包含edgelist和时间(会话),如下所示:R 基于时间段的子集网络构建,r,list,matrix,R,List,Matrix,我对这里的一切都不熟悉。我试图投入更多的精力使我的代码可读。我正在编写为多个文件运行函数的代码。我有100多个文件,每个文件包含edgelist和时间(会话),如下所示: Header: Time Sender Receiver 1 1 2 1 1 3 2 2 1 2 2 1 3 1 2 3 1 2 该函数的目的是
Header: Time Sender Receiver
1 1 2
1 1 3
2 2 1
2 2 1
3 1 2
3 1 2
该函数的目的是根据“时间”从每个文件中提取子网络。由于有3个不同的时间段,每个文件将有3个子网络。以下是我编写的代码:
SubsetNetwork <-function (file) {
df = read.csv(file)
uniq <-unique(unlist(df$Time))
edgelist=list()
g=list()
for (i in 1:length(uniq)){
g <- lapply(split(df, df$Time), function(x) {
graph.edgelist(as.matrix(x[c("Sender","Receiver")]), directed = T)
})
edgelist[[i]]=get.edgelist(g[[i]])
filename=paste(fname, i, ".csv")
write.csv(edgelist[[i]], filename)
}
}
SubsetNetwork如果您的代码对一个文件运行良好,则您收到的错误表明您的代码没有问题。只有当唯一时间点的数量小于1时,才应该得到g[[i]]
超出范围
我怀疑发生的是一个格式不正确或损坏的文件缺少一个“时间”头,temp正在提取该头文件。请在使代码可读(和可复制)方面投入更多精力。仅仅发布一个屏幕截图而没有对非基本函数进行库调用是不够的。您还应该发布dput(head(df))的输出。
。我不确定我是否理解您在做什么,但这是否有帮助:lappy(split(df,df$Time),function(x)graph.edgelist(as.matrix(x[c(“Sender”,“Receiver”)),directed=T))
?(df
是最后的数据帧(时间发送器等))。输出是一个包含3个类似IGRAPH D--3 2--
-的元素的列表。很抱歉,我的代码不可读。我不习惯写代码。我试着自己学习@谢谢你。我想你的代码会有很大帮助。非常感谢你的评论。因为我试图自己学习R,所以我使用了别人的代码片段(即使我也不知道他们真正做了什么)。不管怎样,多亏了你,我学到了很多。不客气!我注意到,对于刚开始学习的人来说,有很多先进的概念,所以我想我应该帮点忙:)
temp = list.files(pattern="*.csv")
for (i in 1:length(temp)){
file <-temp[i]
SubsetNetwork (file)
}
SubsetNetwork <-function (file) {
df = read.csv(file)
uniq <-unique(unlist(df$Time))
uniq <-unique(df$Time)
edgelist=list()
g=list()
for (i in 1:length(uniq)){
g <- lapply(split(df, df$Time), function(x) {
graph.edgelist(as.matrix(x[c("Sender","Receiver")]), directed = T)
})
edgelist[[i]]=get.edgelist(g[[i]])
filename=paste(fname, i, ".csv")
write.csv(edgelist[[i]], filename)
}
}
g <- lapply(split(df, df$Time), function(x) {
graph.edgelist(as.matrix(x[c("Sender","Receiver")]), directed = T)
})
edgelist <- lapply(g, get.edgelist)
for (i in 1:length(uniq)){
filename=paste(fname, i, ".csv")
write.csv(edgelist[[i]], filename)
}
}
SubsetNetwork <-function (file) {
df = read.csv(file)
g <- lapply(split(df, df$Time), function(x) {
graph.edgelist(as.matrix(x[c("Sender","Receiver")]), directed = T)
})
edgelist <- lapply(g, get.edgelist)
for (i in 1:length(g)){
filename=paste0(fname, i, ".csv")
write.csv(edgelist[[i]], filename)
}
}