2017-07-06 5 views
0

私は、テストを適用する必要がある単一のファイルの束を持っています。私は、各ファイルの結果を自動的にファイルに書き込む方法を見つける必要があります。ここで私は何をすべきかです:ループで順番に結果を書きます。

library(ape) 
stud_files <- list.files("path/dir/data",full.names = T) 
for (f in stud_files) { 
df <- read.table(f, header=TRUE, sep=";") 
df_xts <- as.xts(df$cola, order.by = as.Date(df$colb,"%m/%d/%Y")) 
pet <- testa(df_xts) 
res <- data.frame(estimate = pet$estimate, 
       p.value=pet$p.value, 
       logi = pet$alternative) 
write.dna(res,file = "res_testa.xls",format = "sequential") 
} 

このループは、連続して各ファイルの結果を書き込むことを目指し最後のコマンドを除いて、うまく機能し、それが唯一の最後のパフォーマンスを救いました。結果は、上で定義したテーブル(data.frame)ではなく、文字列として保存されます。この場合、どんな考えですか?事前に感謝

+0

各繰り返しのresを保存し、後でまとめてバインドして1回でファイルに書き込むことはできますか? – JAD

+1

書き込みステートメントに "append = TRUE"を追加してみてください。 – Dave2e

+0

@ JarkoDubbeldam:私の考えは、次のファイルに進む前にすぐに保存することです。私は、テーブルにバインドしてそれらをすべて書き込むという選択よりも簡単にすべきだと思いますか? – Hari

答えて

2

チェックhelp(write.dna)

write.dna(FALSE =、付加X、ファイル、形式= "インターリーブ"、 nbcol = 6、COLSEP = ""、colw = 10、インデント= NULL、 blocksep = 1)

論理を追加します。TRUEの場合、ファイルにデータが存在しない場合は、 のデータはファイルに追加されません。そうでない場合はファイルが上書きされます(デフォルトはFALSE)。

append = TRUEと設定する必要があります。

しかし、いくつかのコメントが指摘しているように、おそらくテーブルを生成してからすぐにファイルに書き込むほうがよいでしょう。あなたが何十億ものファイルを持っていない限り、おそらくメモリ不足はありません。

これは私がこれにアプローチする方法です。

library(ape) 
library(data.table) 

stud_files <- list.files("path/dir/data",full.names = T) 

sumfunc <- function(f) { 

    df <- read.table(f, header=TRUE, sep=";") 
    df_xts <- as.xts(df$cola, order.by = as.Date(df$colb,"%m/%d/%Y")) 
    pet <- testa(df_xts) 
    res <- data.table(estimate = pet$estimate, 
        p.value=pet$p.value, 
        logi = pet$alternative) 
    return(res) 

} 

lres <- lapply(stud_files, sumfunc) 
dat <- rbindlist(lres) 

write.table(dat, 
      file = "res_testa.csv", 
      sep = ",", 
      quote = FALSE, 
      row.names = FALSE) 
+0

ありがとうございました。結果がリストされているが、このような行で:推定2195 p.value 1.40119324 LOGI真・チャン 日私はdata.frameを書いたとき、彼らはテーブルに表示されていることを期待する1960年5月3日 どうすればテーブル/ data.frameに書き込むことができますか?ありがとう – Hari

+0

'write.dna'を使う必要があるのでしょうか? 'res.'を結果として表形式で出力する' write.csv'または 'write.table'を使うことができます。 'append = TRUE'パラメータも同じです。 –

+0

実際には、結果をループで連続して書き込むことを目的としたwrite.dnaを初めて使用します。 write.tableとwrite.scvまたはwrite.xlsxを試しましたが、同じ問題があります。 – Hari

関連する問題