【发布时间】:2013-11-01 19:00:29
【问题描述】:
我对这里的一切都很陌生。我试图付出更多努力使我的代码可读。我正在编写为多个文件运行函数的代码。我有超过 100 个文件,每个文件都包含带有时间(会话)的边缘列表,如下所示:
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)
}
}
这段代码将运行上面的函数。
temp = list.files(pattern="*.csv")
for (i in 1:length(temp)){
file <-temp[i]
SubsetNetwork (file)
}
- 输入文件=626234T.csv
- 输出文件 = 626234T1.csv、626234T2.csv、626234T3.csv。
我不断收到错误消息 (Error in g[[i]] : subscript out of bounds)。如果我一个一个地运行代码,它似乎可以工作。但是,如果我输入多个文件,它会为多个文件生成输出并停止工作。我不知道是什么导致了问题。
【问题讨论】:
-
请更加努力使代码可读(和可重现)。仅仅发布一个没有库调用非基本函数的屏幕抓取是不够的。您还应该发布来自
dput(head(df))的输出。 -
我不确定我是否理解你在做什么,但这有帮助吗:
lapply(split(df, df$Time), function(x) graph.edgelist(as.matrix(x[c("Sender", "Receiver")]), directed = T))? (df是最后的数据帧(时间发送者等))。输出是 3 个类似IGRAPH D--- 3 2 --的元素的列表。 -
很抱歉我的代码不可读。我不习惯写代码。我试着自学。 @alexis_laz 谢谢。我想你的代码会有很大帮助。