2016-10-25 5 views
3

26個の.csvファイルを含むフォルダがあります。各ファイルには、ヘッダーがDO2Time_minの2つの列があり、すべてに少なくとも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

割り当てを使用する代わりに、リスト内のオブジェクトに追加することをお勧めします。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ファイルを使用すると、ページごとに1つのプロットを作成できます。 PDFファイルはあなたの現在の作業ディレクトリにあります。

関連する問題