2016-06-01 2 views
-1

私のスクリプトは、フォルダからテキストファイルのリストを読み込みます。各テキストファイルのいくつかの列のすべての値の計算が行われます。 最後に、結果のdata.frameを別の場所にある新しいテキストファイルに書きたいと思います。 問題は、スクリプトが前に作成したファイルを上書きし続けることです。だから、私は1つのファイル(最後に読み込まれたファイル)で終わります。 しかし、私はここで間違っていることを得ることはありません。出力ファイル名は毎回異なるので、私の頭では別々のファイルを生成するはずです。R - write.tableはファイルを上書きします

RAW <- "C:/path/tofiles" 
files <- list.files(RAW, full.names = TRUE) 
for(j in length(files)) { 
    if(file.exists(files[[j]])){ 
    data <- read.csv(files[[j]], skip = 0, header=FALSE) 
    data[9] <- do.call(cbind,lapply(data[9], function(x){(data[9]*0.01701)/0.00848})) 
    data[11] <- do.call(cbind,lapply(data[11], function(x){(data[11]*0.01834)/0.00848})) 
    data[13] <- do.call(cbind,lapply(data[13], function(x){(data[13]*0.00982)/0.00848})) 
    data[15] <- do.call(cbind,lapply(data[15], function(x){(data[15]*0.01011)/0.00848})) 
    OUT <- paste("C:/path/to/destination_folder",basename(files[[j]]),sep="") 
    write.table(data, OUT, sep=",", row.names = FALSE, col.names = FALSE, append = FALSE) 
    } 
} 
+0

「OUT」の内容を確認してください。 'full.names = TRUE'で' list.files'の結果を使用しているので、正しいとは思いません。 – Roland

+0

「OUT」が正しいです。私は 'files [[j]]' 'basename'だけを使用しています – BallerNacken

+1

あなたの' for'ループは正しくありません。 1回の反復しか行いません。 'for(j in seq_along(files))'でなければなりません。 – Roland

答えて

1

問題は、あなたのforループであり、次のよう

スクリプトが見えます。 length(files)は1つの値、つまりあなたのfilesベクトルの長さを提供するだけですが、その長さのシーケンスが必要です。
seq_alongまたはfor(j in files)を試してください。

+0

Thx!それが問題でした。私は別のプロジェクトで同じように働いていました。 – BallerNacken

関連する問題