我試圖運行一個循環通過一系列保存爲.csv文件鄰接表的遍歷,將它們轉換爲邊列表中R作爲一個網絡對象和網絡對象,並使用文件名保存每個對象。節省每次迭代的結果的for循環使用的文件名
問題是a)代碼似乎循環遍歷文件名列表,但不會產生任何輸出b)它不會使用文件名保存網絡對象(它每次都會覆蓋)。
注意,代碼工作正常,在更換了字母「f」的for循環的「filename.csv」標識的單個文件。
l.files <- list.files(patt='.*csv$')
i <- 0
for (f in l.files) {
lines=scan(f,what="character",sep="\n")
lines=gsub(","," ",lines)
lines=gsub("[ ]+$","",gsub("[ ]+"," ",lines))
adjlist=strsplit(lines," ")
col1=unlist(lapply(adjlist,function(x) rep(x[1],length(x)-1)))
col2=unlist(lapply(adjlist,"[",-1))
el=cbind(col1,col2)
#If second column of el contains 0 then delete
row_sub = apply(el, 1, function(row) all(row !=0))
#This subset then saved as the new edgelist
el <- el[row_sub,]
#Save edgelist using the filename
el[f] <- el
summary(el)
i=i+1
}
任何幫助將非常感謝!
你永遠不會得到'i'涉及你想要的方式。我想你想要的是'for(我in 1:length(l.files))'。如果是這樣的話,你不需要'i < - 0'和'i < - i + 1'這兩行,並且必須用'el [i] < - el'中的i替換f。但是,如果沒有示例數據,我無法測試,但也許它會讓你開始 – vaettchen
謝謝,實際上忽略了我沒有使用的索引,所以它的錯誤留下了。 –
我想更簡單的例子是:對於(F在l.files){打開文件,使用的文件名保存文件作爲邊緣列表即文件1 < - EL},使得每個文件現在具有與對應的保存中的R的邊緣列表文件名 –