我想对存储在我的工作目录中的多个数据集执行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并为记录生成输出的工作循环。
答案 0 :(得分:2)
您可能希望list.files
与full.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的这种方法,因为结果直接存储到文件中而不跳过列表,然后必须弄清楚如何以可读的方式将列表存储到文件中。