多个文件上的anova的R循环

时间:2013-01-21 00:20:17

标签: r loops anova

我想对存储在我的工作目录中的多个数据集执行anova。到目前为止,我已经提出:

files <- list.files(pattern = ".csv")
for (i in seq_along(files)) {
    mydataset.i <- files[i]
    AnovaModel.1 <- aov(DES ~ DOSE, data=mydataset.i)
    summary(AnovaModel.1)
} 

正如您所看到的,我对循环非常新,并且无法使其工作。我也明白我需要添加一个代码来将所有摘要输出附加到一个文件中。我将不胜感激,您可以提供任何帮助来指导可以在目录(相同的标题)中的多个.csv文件上执行anovas并为记录生成输出的工作循环。

2 个答案:

答案 0 :(得分:2)

您可能希望list.filesfull.names = TRUE一起使用,以防您不在同一条道路上。

files <- list.files("path_to_my_dir", pattern="*.csv", full.names = T)
# use lapply to loop over all files
out <- lapply(1:length(files), function(idx) {
    # read the file
    this.data <- read.csv(files[idx], header = TRUE) # choose TRUE/FALSE accordingly
    aov.mod <- aov(DES ~ DOSE, data = this.data)
    # if you want just the summary as object of summary.aov class
    summary(aov.mod)
    # if you require it as a matrix, comment the previous line and uncomment the one below
    # as.matrix(summary(aov.mod)[[1]])
})
head(out)

这应该为您提供list,其中列表中的每个条目与相同的订单中的summary matrix作为输入文件列表。

答案 1 :(得分:2)

您的错误是您的循环没有加载您的数据。您的文件名列表在“文件”中,然后您开始移动该列表并将mydataset.i设置为等于与您的itterator匹配的文件的名称...但是您尝试在文件名上运行aov存储在mydataset.i!

您要将输出重定向到文件的命令是sink。请考虑以下事项:

sink("FileOfResults.txt") #starting the redirect to the file
files <- list.files("path_to_my_dir", pattern="*.csv", full.names = T) #using the fuller code from Arun
for (i in seq_along(files)){
   mydataset.i <- files[i]
   mydataset.d <- read.csv(mydataset.i) #this line is new
   AnovaModel.1 <- aov(DES ~ DOSE, data=mydataset.d) #this line is modified
   print(summary(AnovaModel.1))
} 
sink() #ending the redirect to the file

我更喜欢Arun的这种方法,因为结果直接存储到文件中而不跳过列表,然后必须弄清楚如何以可读的方式将列表存储到文件中。