0

再会,

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

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)
}

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

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

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

4

2 回答 2

1

我不确定我是否理解您想要的内容,但如果您将文件称为“file1”、“file”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,或任何你需要得到你想要的输出)在一个文件中得到结果。

这是否回答你的问题 ?

于 2013-06-26T08:29:53.693 回答
1

那这个呢

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

或者这个

file.dir <- "/path/to/files"
for(infile in dir(file.dir, pattern="\\.txt$")) {
  ## do stuff
}
于 2013-06-26T08:34:40.583 回答