2016-06-01 2 views
-1

내 스크립트는 폴더의 텍스트 파일 목록을 읽습니다. 각 텍스트 파일의 몇 열에있는 모든 값에 대한 계산이 수행됩니다. 결국 나는 결과 data.frame을 다른 위치에있는 새로운 텍스트 파일에 쓰려고합니다. 문제는 이전에 만든 파일을 스크립트가 계속 덮어 쓰는 것입니다. 따라서 하나의 파일 (마지막으로 읽은 파일)로 끝납니다. 하지만 여기서 잘못하고있는 것을 얻지 못합니다. 출력 파일 이름은 매번 다르므로 내 머리 속에 별도의 파일이 생성되어야합니다.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' 루프가 올바르지 않습니다. 하나의 반복만을 수행합니다. 'for (j in seq_along (files))'이어야합니다. – Roland

답변

1

문제는 당신 for 루프에 다음과 같이

스크립트 보인다. length(files)은 단지 하나의 값, 즉 files- 벡터의 길이를 제공하는 반면, 그 길이의 시퀀스를 원한다고 생각합니다.
seq_along 또는 for(j in files)으로 시도해보십시오.

+0

Thx! 그것이 문제였습니다. 이상하게도 그것은 다른 프로젝트에서 나와 같은 방식으로 작동했습니다. – BallerNacken