2015-11-18 88 views
1

我想將打印功能輸出轉換爲數據框對象。我使用了此代碼,但我只將最後一行作爲數據框行。 這裏是一個玩具數據幀:如何將打印功能輸出到數據框中

df <- read.table(text = " target birds wolfs  
       32   9   7 
       56   8   4 
       11   2   8 
       22   2   3 
       33   8   3 
       54   1   2 
       34   7   16 
       66   1   5 
       74   17  7 
       52   8   7 
       45   2   7 
       65   20  3 
       99   6   3 
       88   1   1 
       77   3   11 
       55   30   1 ",header = TRUE) 

for(i in names(df)) 

    { 
     fit <- lm(df[,i] ~ target, data=df) #does a regression per column 
     res<- summary(fit)$r.squared 
     b<-print(paste(res,i))    
    } 
# I got this output from the print function : 
[1] "1 target" 
[1] "0.0110699859137896 birds" 
[1] "0.07231285430469 wolfs" 

如何可以把這個輸出到包含兩列的數據幀:第一種是爲值(1,0.11,0.07),第二個是用於名(目標,鳥,狼吞虎嚥) 我試圖用這個命令,但我只拿到了打印輸出的拉斯維加斯線:

b1<-as.data.frame(b) 
b1 
         b 
1 0.07231285430469 wolfs 

回答

3

行,我只想運行一個簡單的sapply

data.frame(Col = names(df), 
      Rsqrd = unname(sapply(df, function(x) summary(lm(x ~ df$target))$r.squared))) 
#  Col  Rsqrd 
# 1 target 1.00000000 
# 2 birds 0.01106999 
# 3 wolfs 0.07231285 
+1

感謝@大衛Arenburg,一行代碼的偉大工程。 – mql4beginner

1

你可以改變你的位功能:

b<-as.data.frame(matrix(NA,nrow=length(names(df)),ncol=2)) 
# or b<-data.frame(Rsq=numeric(),Name=character(),stringsAsFactors=FALSE) 

for (i in seq_along(names(df))){ 
    j<-names(df)[i] 
    fit <- lm(df[,j] ~ target, data=df) 
    rsq <- summary(fit)$r.squared 
    b[i,]<-cbind(rsq,j)   
} 

b 
        V1  V2 
1     1 target 
2 0.0110699859137896 birds 
3 0.07231285430469 wolfs 

在你的函數中沒有工作的是b在每次迭代中都改變了,並刪除了以前的值。這裏的值放在dataframe中,您可以稍後使用它。

+0

謝謝@etienne .. – mql4beginner

1

我會將所有內容保存到列表中,然後將其平鋪到data.frame中。

東西沿着

N <- 10 

my.list <- vector("list", N) 

for (i in 1:N) { 
    my.list[[i]] <- c(element1 = runif(1), element2 = runif(1)) 

do.call("rbind", my.list) 
     element1 element2 
[1,] 0.63435664 0.57285398 
[2,] 0.04031899 0.06093284 
[3,] 0.63446004 0.03669334 
[4,] 0.27712280 0.80234739 
[5,] 0.08285555 0.92606686 
[6,] 0.17928155 0.93633017 
[7,] 0.04661537 0.08380414 
[8,] 0.41108456 0.18566136 
[9,] 0.27616150 0.38485649 
[10,] 0.21108018 0.87233677