2016-10-25 4 views
3

26 개의 .csv 파일이있는 폴더가 있습니다. 각 파일에는 헤더가 DO2Time_min 인 두 개의 열이 있으며 모두 300 개 이상의 행이 있습니다.디렉토리의 여러 파일에 대한 선형 모델 루핑

나는, x=Time_miny=DO2와 산점도을 각각의 선형 모델을하기 위해선, 26 개 각 모델에 대한 coefficientR^2를 가지고 테이블에 넣어합니다.

이것은 코드가 작성한대로 작성한 것입니다. 나는 그것을 복사하여 붙여 넣을 수는 있지만 더 똑똑한 방법이 있어야한다는 것도 알고 있습니다.

setwd("~/Documents/Masters/Data/R/35789/35789_Ucrit") 

#The file where I want all the coefficients and R^2 to go 
UE_Slope <- read.csv("~/Documents/Masters/Data/R/35789/35789_UE_Slope.csv") 

temp = list.files(pattern="*.csv") 
for (i in 1:length(temp))(assign(temp[i], read.csv(temp[i]))) 

#Seal# are the names for the files directory, 1-26 
plot(DO2 ~ Time_min, data = Seal1) 
model1 <- lm(DO2 ~ Time_min, data = Seal1.csv) 
UE_Slope <- rbind(UE_Slope, data.frame("Slope"=coef(model1)[[2]], "R.2"=summary(model1)$r.squared)) 
+0

assign을 사용하는 대신 목록에있는 객체를 추가하십시오 : lst [[temp [i]]] - read.csv (temp [i])' –

답변

2

"csv"파일을 읽고 선형 모델을 적용하고 요약 통계를 얻는 함수를 먼저 정의합니다.

f <- function (file) { 
    ## read file 
    dat <- read.csv(file) 
    ## fit model 
    fit <- lm(DO2 ~ Time_min, data = dat) 
    slope <- coef(fit)[2] 
    ## make a plot?? 
    plot(DO2 ~ Time_min, data = dat, main = file) ## use file names as title 
    abline(fit) ## overlay fitted regression line 
    ## note, I am not using `summary.lm` as that is expensive 
    ## R-squared can be easily computed 
    RSS <- crossprod(fit$residuals)[1] 
    TSS <- crossprod(dat$DO2 - mean(dat$DO2))[1] 
    R2 <- 1 - RSS/TSS 
    ## return a vector 
    c("Slope" = slope, "R.2" = R2) 
    } 

이제 모든 파일을 통해, 우리는 단순히 루프, f 적용 :

temp <- list.files(pattern = "*.csv") 
pdf("whatever.pdf") 
result <- t(sapply(temp, f)) 
dev.off() 

sapply은 평면 매트릭스 끝 cbind을; t()을 사용하면 키가 큰 행렬이됩니다. pdf()dev,off()은 PDF 파일을 열고 닫습니다. 모든 플롯은 해당 파일에서 작성됩니다. 화면에 패널 형식으로 표시하기가 쉽지 않은 26 개의 그림이 필요해 보입니다. PDF 파일을 사용하면 페이지 당 하나의 플롯을 만들 수 있습니다. PDF 파일은 현재 작업 디렉토리에 있습니다.