2012-03-16 3 views
1

여러 악기 실행에서 20 개의 텍스트 파일이있는 폴더가 있습니다. 데이터 섹션은 모두 선형 회귀 분석을 실행하고, 기울기 및 R2 값을 꺼내, 내가하고 싶은 어떤이여러 파일에 대한 선형 회귀 실행 R

22/05/11; 16:03:28;  0.000; 6.079; 31.41; 84881; 25.60; E0; 
22/05/11; 16:03:29;  0.017; 6.063; 31.44; 84868; 25.60; E0; 
22/05/11; 16:03:30;  0.034; 6.079; 31.41; 84868; 25.60; E0; 
22/05/11; 16:03:31;  0.051; 6.079; 31.41; 84868; 25.60; E0; 
22/05/11; 16:03:32;  0.068; 6.068; 31.43; 84868; 25.60; E0; 
22/05/11; 16:03:33;  0.085; 6.068; 31.43; 84881; 25.60; E0; 
22/05/11; 16:03:34;  0.102; 6.079; 31.41; 84874; 25.60; E0; 

같은 동일한 형식으로 내 폴더 내의 모든 파일을 읽을 수 있습니다.

현재이 파일은 단일 파일에 대한 코드입니다.

O2=read.table("Coral 1_Dark.txt",skip=58, sep=";",header=FALSE) 
names(O2)<-c("Date","Time","Log_Time","O2_mgL","Phase","Amp","Temp C","Error Message") 
O2$id<-seq_len(nrow(O2)) #creates unique ID for each measurement (use for regression) 
attach(O2) 
fit=lm(O2_mgL~id) 
summary(fit) 

이 코드를 실행 한 후 경사 및 R2 데이터를 수동으로 입력했습니다.

지금은 모두 내가 가진

F=list.files() 

에 관심이 파일을 나에게주는 모두 20 개 개의 파일

[1] "Coral 1_Dark.txt" "Coral 1_Light.txt" "Coral 10_Dark.txt" "Coral 10_Light.txt" "Coral 2_Dark.txt" 
[6] "Coral 2_Light.txt" "Coral 3_Dark.txt" "Coral 3_Light.txt" "Coral 4_Dark.txt" "Coral 4_Light.txt" 
[11] "Coral 5_Dark.txt" "Coral 5_Light.txt" "Coral 6_Dark.txt" "Coral 6_Light.txt" "Coral 7_Dark.txt" 
[16] "Coral 7_Light.txt" "Coral 8_Dark.txt" "Coral 8_Light.txt" "Coral 9_Dark.txt" "Coral 9_Light.txt" 

내가 끝낼 싶은 것이 포함 된 변수를 만들 수 있습니다 들어 20 개 파일 모두에 대해 이와 같이 될 것입니다.

Coral   Slope  R2 
Coral 1_Dark  0.23   98.3 
Coral 2_Dark  0.33   99.3 

ect

제안 사항이 있으십니까? 나는 적용 함수 나 어떤 종류의 루프로도 작업을 해본 적이 없다. 그러나 이것은 바뀔 것으로 생각하고있다. .....

답변

3

이와 비슷한 기능이 있습니까?

wd <- "C:/Data" 
files <- dir(wd) 
varnames <- c("Date", "Time", "Log_Time", "O2_mgL", "Phase", "Amp", "Temp C", 
      "Error Message") 
results <- data.frame() 

for (i in 1:length(files)) { 
    fname <- paste(wd, files[i], sep="/") 
    data <- read.table(fname, sep=";", skip=58) 
    colnames(data) <- varnames 
    data$id <- 1:nrow(data) 
    fit <- summary(lm(O2_mgL~id, data=data)) 
    results[i,1] <- fit$coefficients[2] 
    results[i,2] <- fit$r.squared 
} 

rownames(results) <- sub(".txt", "", files) 
colnames(results) <- c("Slope", "R2") 

print(results) 
+0

매력처럼 작동합니다. 고마워요! – Vinterwoo

1

이 코드는 기회가 될 수도있다. attach를 사용하는 것은 좋은 생각이 아니지만, 특히 함수를 생성 할 때는 attach를 사용하는 것이 좋습니다.

Coral_1_Dark.txt <- "22/05/11; 16:03:28;  0.000; 6.079; 31.41; 84881; 25.60; E0; 
+ 22/05/11; 16:03:29;  0.017; 6.063; 31.44; 84868; 25.60; E0; 
+ 22/05/11; 16:03:30;  0.034; 6.079; 31.41; 84868; 25.60; E0; 
+ 22/05/11; 16:03:31;  0.051; 6.079; 31.41; 84868; 25.60; E0; 
+ 22/05/11; 16:03:32;  0.068; 6.068; 31.43; 84868; 25.60; E0; 
+ 22/05/11; 16:03:33;  0.085; 6.068; 31.43; 84881; 25.60; E0; 
+ 22/05/11; 16:03:34;  0.102; 6.079; 31.41; 84874; 25.60; E0; 

list_of_summaries <- sapply('Coral_1_Dark.txt', function(nam) { 
    O2 <- read.table(file=textConnection(get(nam)), sep=";",header=FALSE) 
    names(O2) <- c("Date","Time","Log_Time","O2_mgL","Phase", 
           "Amp","Temp C","Error Message", "junk") 
    O2$id <- seq_len(nrow(O2)) 
    fit=lm(O2_mgL~id , data=O2) 
    summ <- summary(fit) 
    return(c(slope= coef(fit)["id"], R2= summ[["r.squared"]])) }) 

as.data.frame(list_of_summaries) 
+0

답변 해 주셔서 감사합니다. 나는 그것을 사용하여 시도하고 "오류 : 예기치 않은"] ' "요약 - 요약 (적합) 반환 (C (기울기 = summ [[계수"] "[id"]] "오류가 발생했습니다. [도움을받지 못하지만] 도움을받지 못했습니다. 문제가 될 수있는 아이디어가 있습니다.이 문제를 확인하기 위해 전체 데이터 세트를 포함하지 않아서 죄송합니다. – Vinterwoo

+0

수정 한 결함이있는 테스트 케이스를 편집했습니다. –

0

예, 적용 기능을 소개하려고합니다. 기본적으로 dir() 폴더에서 호출 한 다음 함수에서 수행 한 모든 작업을 단일 파일 인수로 래핑합니다. 관심있는 결과를 반환하십시오. 그런 다음 함수를 두 번째 인수로 사용하여 파일 목록에서 lapply를 호출하십시오.