2012-07-02 5 views
3

현재 내 반복 (R) 루프 (아래 참조)는 반복 할 때마다 덮어 씁니다. 각 루프의 결과를 텍스트 파일로 출력하고 싶습니다.파일에 R 루프의 출력을 기록하십시오.

더 자세히 : R 초보자가 내 스크립트에 줄을 포함시켜 각 파일에 대해 평균값 계산이 텍스트 파일에 기록되는 것을 궁금해합니다. 스크립트가 새로운 빈 텍스트 파일을 만든 다음 스크립트가 파일에서 열 4의 평균을 계산할 때마다 값이 텍스트 파일의 행에 출력됩니다. 여기에는 column1에있는 파일 이름과 열 2입니다. 도움 주셔서 감사합니다! 그러나

write.csv(data.frame(fname=filename[i],mean=mean),file="output.csv",append=TRUE) 

, 이것은 파일 시스템 오버 헤드를 많이 의미, 그리고 그것을 빨리 전체 데이터를 생성 할 것입니다 : 루프로 그것을 할 수

filename <- system("ls /dir/",intern=TRUE) 

for(i in 1:length(filename)){ 

file <- read.table(filename[i],header=FALSE) ## if you have headers in your files ## 
mean <- mean(as.numeric(file$V4)) 



} 

답변

5

은 루프 추가에, 실행 프레임을 R에 넣고 파일 전체를 씁니다. 그래서 대신 루프 쓰기 : 다음

means <- sapply(filename, function(x) mean(as.numeric(read.table(x,header=FALSE)$V4))) 

그리고있는 전체 파일 쓰기 : 처음에만 열 이름으로 파일을 생성 한 다음 추가하여 그것을 할 것입니다

write.csv(data.frame(fname=filename,mean=means),file="output.csv") 
+1

덕분에 병이 시도 내 루프 그것은 1로 온다 : write.csv에서 (data.frame (fname = filename [i], mean = mean), ... : '추가'를 무시하려고 시도 함 – user964689

+0

다른 솔루션은 훌륭한 tho 감사합니다. 훨씬 빠르 네 말이 맞아! – user964689

4

다음 스크립트를 각 결과. 각 단계에서 파일에 쓰기

filename <- system("ls /dir/",intern=TRUE) 

column_names <- data.frame(filename = "filename", mean = "mean") 
write.table(column_names, file = "output.csv", row.names = FALSE, 
      append = FALSE, col.names = FALSE, sep = ", ", quote = TRUE) 

for(i in 1:length(filename)){ 
    file <- read.table(filename[i],header=FALSE) 
    newline <- data.frame(t(c(filename[i], mean(as.numeric(file$V4))))) 
    write.table(newline, file = "output.csv", row.names = FALSE, 
       append = TRUE, col.names = FALSE, sep = ", ") 
} 

하지만 매우 효율적이지, 당신은 단지 마지막에 그 일을 고려해 볼 수 있습니다 :에 추가의 비효율적 솔루션,

filename <- system("ls /dir/",intern=TRUE) 

results <- data.frame(filename = "filename", mean = "mean") 

for(i in 1:length(filename)){ 
    file <- read.table(filename[i],header=FALSE) 
    newline <- data.frame(t(c(filename = filename[i], mean = mean(as.numeric(file$V4))))) 
    results <- rbind(results, newline) 
} 
write.table(results, file = "output.csv", row.names = FALSE, 
      append = FALSE, col.names = TRUE, sep = ", ") 
관련 문제