将循环应用于R中的函数

时间:2013-06-26 08:16:27

标签: r

美好的一天,

我已经设法编写了一个脚本来使用行的均值来规范化一行中的数据。我不确定是否使用了function命令来创建合适的函数(代码)

hyp <- function(x){
 andira<-subset(filenames, select=c(Wavelength,X400:X2400))
 myBreaks <- gl(ceiling((ncol(andira)-1)/5), 5)[1:(ncol(andira)-1)]
 and.mean<-cbind(andira[1],
       sapply(levels(myBreaks), function(y) {
         rowMeans(andira[-1][myBreaks == y])
       }))
 library(data.table)
 and.T <- as.data.table(and.mean)
 and.T.new<-and.T[,list(Mean=rowMeans(.SD)), by=Wavelength]
 normalized<-and.mean/and.T.new$Mean
 normalized$Wavelength<-andira$Wavelength
 final<-aggregate(normalized, by=list(normalized$Wavelength), FUN=mean)
    write.table(final, file = "data-appended.csv", sep = ",",
             col.names = FALSE, append=TRUE)
}

我想将此功能应用于我保存在文件夹中的不同文件。我搜索并看到我可以使用以下命令读取放在文件夹(Functions)中的所有文件:

filenames <- list.files("C:/Users/dfs/Documents/Function", pattern="*.txt",       full.names=TRUE)

我想我可能不得不使用循环,但我以前从未使用过循环,我不知道如何实现循环以确保脚本自动应用于所有文件,并且最终结果会自动附加到我的单输出文件。我已经看到使用了 plyr 打包。我不确定这是否是最佳方法。有什么建议吗???

2 个答案:

答案 0 :(得分:1)

我不确定我理解你想要什么,但是如果你把你的文件称为“file1”,请提交“2”等文件:

for (j in 1:60)
{

    infile<-paste("C:/Users/dfs/Documents/Function/file",j,".txt",sep="")
    data<-read.table(infile,header=T,sep="\t")
}

是一种循环文件的方法。

然后您可以使用以下内容:

output<-cbind(output,data)

(或rbind,或任何你需要输出的东西)将结果放在一个文件中。

这会回答你的问题吗?

答案 1 :(得分:1)

这个怎么样?

for (file in filenames ) {
  ## do stuff
}

或者这个

file.dir <- "/path/to/files"
for(infile in dir(file.dir, pattern="\\.txt$")) {
  ## do stuff
}