3

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

ご覧のとおり、私はループに非常に慣れていないため、これを機能させることができません。また、すべてのサマリー出力を 1 つのファイルに追加するコードを追加する必要があることも理解しています。ディレクトリ内の複数の .csv ファイル (同じヘッダー) に対して anovas を実行し、レコードの出力を生成できる作業ループをガイドするために提供できるヘルプをいただければ幸いです。

4

2 に答える 2

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で表示されるはずです。

于 2013-01-21T00:26:13.750 に答える
2

エラーは、ループがデータをロードしていないことです。ファイル名のリストは「ファイル」にあります。次に、そのリストを移動し、イテレータ i に一致するファイルの名前と同じ mydataset.i を設定します...しかし、次のファイル名で 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のアプローチよりもこのアプローチを好みます。

于 2013-01-21T15:57:16.900 に答える