使用循环打开存储在列表中的文件名

时间:2014-12-19 03:04:49

标签: r

我有一个要打开的文件名列表。我需要一次打开一个文件,执行一些操作,然后将结果写入另一个文件。我怎么能在R中做到这一点。在python中我会用

做同样的事情
item = ['f1','f2','f3']
for stuff in item:
    f = open(stuff).read()
    #do some ops
    k = open('new/'+stuff,'w')
    k.write(f)
    k.close()

如何在R中实现相同的目标呢?

这就是我所做的

fileList <- list.files("temp", pattern="*.csv", full.names=TRUE)
filer<-function(filName){
csv4.data <- read.csv(paste('/home/amrith/ferosaRanks/combine/',filName,sep=""),header=FALSE)
mat = as.matrix(csv4.data)
(CESnoweights <- RankAggreg(mat, 14, method="CE", distance="Spearman", convIn=7, rho=.1))
write.csv(CESnoweights['top.list'],file=paste("/home/amrith/ferosaRanks/unW/",filName,sep=""))
}
lapply(fileList,filer)

基本上使用list.files加载文件名。 将操作定义为函数 使用lapply

将操作应用于每个条目

2 个答案:

答案 0 :(得分:1)

如果文件是csv格式,这是一个简单的解决方案。

for (i in 1:length(item)){
   d <- read.csv(item[i])
   # do something to d
   new_file <- paste0(item[i], "_new")
   write.csv(d,file = new_file)
 }

答案 1 :(得分:1)

您可以使用paste()。例如,假设我想对某个目录中的所有文件执行操作。首先,我可以使用list.files()获取列表。

filelist = list.files("C:/Users/XXX/Desktop/r")

然后我可以使用与read.csv结合的粘贴来加载文件(假设你当然有csv&#39;但你可以使用这种方法。

df = read.csv(paste("C:/Users/XXX/Desktop/r/",filelist[1], sep = ""))

如果您的所有数据帧都相同,则可以使用列号来执行操作。

df$newColumn = df[,1]+df[,2]

您可以看到如何在循环中完成此操作。您还应该能够看到如何做到这一点。对于动态文件名,您仍然可以使用此方法。例如,假设原始文件是&#34; XXX.csv&#34;并且您希望处理过的文件是&#34; XXX processed.csv&#34;。然后在操作数据后,您可以执行类似

的操作
write.csv(df, paste("C:/Users/XXX/Desktop/r/",filelist[1], " processed.csv", sep = ""), row.names = FALSE)

如果不确切知道您的数据是什么样的话,很难更具体,但我认为您明白这一点。