美好的一天,
我已经设法编写了一个脚本来使用行的均值来规范化一行中的数据。我不确定是否使用了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 打包。我不确定这是否是最佳方法。有什么建议吗???
答案 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
}