0

我正在尝试运行一个循环来遍历许多保存为 .csv 文件的邻接列表,将它们转换为边缘列表和网络对象,并使用文件名保存其中的每一个。

问题是a)代码似乎在文件名列表中循环但不产生任何输出b)它不会使用文件名保存网络对象(它似乎每次都覆盖)。

请注意,该代码适用于由“filename.csv”标识的单个文件,以替换 for 循环中的“f”。

    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
    }

任何帮助将不胜感激!

4

1 回答 1

0

要打开文件,您可以使用system,例如:

l.files <- system('ls *.csv', intern=T)
file.objs <- lapply(l.files, read.table)

然后您应该能够轻松地将项目转换file.objs为边缘列表。

于 2015-07-01T17:38:54.087 回答