簡體   English   中英

創建一個for循環,其中我按R中的列標識數據

[英]Creating a for-loop where i identifies data by column in R

我正在嘗試使用一個for循環來創建一系列GAM模型的摘要,這些模型使用年中的平滑術語(DOY)以及結合天氣的線性預測變量(有很多這些)。 我做了一個運行和輸出模型摘要的函數:

gamlin <- function(x) {
  m <- gam(Log10E ~ s(DOY) + x, data=eggseasongam)
  return(summary(m))
}

我想我想在for循環中使用上述內容,該循環將第4到173列中的天氣預報作為x,但是正在為此而努力。 任何建議將不勝感激。

謝謝,邁克

我頭頂上的兩種方法可能是:

t<-data.frame(c1=rnorm(10),c2=rnorm(10), c3=rnorm(10))

1次使用formula ,可讓您提供一個字符串作為公式

> f<-function(d,x) lm(formula(paste("c1",x,sep="~")), data=d)
> f(t,"c2")

Call:
lm(formula = formula(paste("c1", x, sep = "~")), data = d)

Coefficients:
(Intercept)           c2
    -0.1567      -0.4654

2-或者直接將色譜柱送入

> f2<-function(d,x) lm(c1 ~ d[,x], data=d)
> f2(t,"c2")

Call:
lm(formula = c1 ~ d[, x], data = d)

Coefficients:
(Intercept)       d[, x]
    -0.1567      -0.4654

確定了動態回歸函數的方法后,可以將其放入for循環中

 for(col in 4:173) f(t,col)

您可能希望以某種方式使用結果,而不是僅打印摘要(也許采用系數並將其放在數據框中並對其進行圖形繪制,或沿這些路線繪制。在這種情況下,我建議檢查plyrreshape包裝並specficially功能meltddply內的每個

在這種情況下,您可以執行以下操作

library(melt)
library(plyr)

yvar<-t[,1]
xvars<-melt(t[,-1])
> head(xvars)
  variable      value
1       c2 -0.8200263
2       c2 -1.5359220
3       c2 -0.2107913
4       c2 -0.2950263
5       c2  0.8231989
6       c2 -0.5971358

betas<-ddply(xvars, .(variable), summarize, beta=coefficients(lm(yvar ~ value))[2])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM