2016-07-15 112 views
1

我試圖運行使用mgcv包一般的添加劑模式,但我不斷收到一個錯誤model.frame.default:廣義加法模型data.frame.default錯誤:嘗試應用無功能

Error in model.frame.default(formula = Presence ~ Sex + wind_speed + baro + : 
attempt to apply non-function 

這裏是我使用的代碼(我用「咣噹()」,因爲數據集的大小):

stormGAM <- bam(Presence~Sex+wind_speed+s(wind_direc)+baro+s(SST_C)+as.factor(daynight), 
      data=PJstorm_alldata, family=binomial, na.action=TRUE) 

這裏就是數據的模樣:

'data.frame': 31795 obs. of 25 variables: 
$ Con_hour  : num 20127330 20127340 20127350 20127360 20127370 ... 
$ Year   : int 2012 2012 2012 2012 2012 2012 2012 2012 2012 2012 ... 
$ Month   : int 7 7 7 7 7 7 7 7 7 7 ... 
$ Day    : int 3 3 3 3 3 3 3 3 3 3 ... 
$ Hour   : int 3 4 5 6 7 8 9 10 11 12 ... 
$ Timestamp  : POSIXct, format: "2012-07-03 03:00:00" "2012-07-03 04:00:00" "2012-07-03 05:00:00" ... 
$ Date   : Date, format: "2012-07-03" "2012-07-03" "2012-07-03" ... 
$ Region   : Factor w/ 1 level "Jervis Bay": 1 1 1 NA NA NA NA NA NA NA ... 
$ Station   : Factor w/ 17 levels "JB1","JB10","JB11",..: 12 12 12 NA NA NA NA NA NA NA ... 
$ ReceiverID  : Factor w/ 37 levels "VR2W-100736",..: 5 5 5 NA NA NA NA NA NA NA ... 
$ TagID   : Factor w/ 54 levels "A69-1303-32577",..: 43 43 43 NA NA NA NA NA NA NA ... 
$ Sex    : Factor w/ 2 levels "Female","Male": 1 1 1 NA NA NA NA NA NA NA ... 
$ wind_speed  : num 11 11 10 12 11 11 14 15 20 24 ... 
$ wind_direc  : num 277 282 278 272 252 269 256 244 220 207 ... 
$ sea_level_baro : num 1018 1018 1018 1019 1019 ... 
$ baro   : num 1018 1018 1018 1019 1019 ... 
$ max_wind  : num 17 13 13 17 17 21 22 24 33 41 ... 
$ SST_C   : num 17.4 17.4 17.4 17.4 17.4 ... 
$ Presence  : int 1 1 1 0 0 0 0 0 0 0 ... 
$ gbirowsums  : int 1 1 1 0 0 0 0 0 0 0 ... 
$ Total_tagged : int 1 1 1 1 1 1 1 1 1 1 ... 
$ Prop_Present : num 1 1 1 0 0 0 0 0 0 0 ... 
$ sunrise   : POSIXct, format: "2012-07-03 07:05:34" "2012-07-03 07:05:34" "2012-07-03 07:05:34" ... 
$ sunset   : POSIXct, format: "2012-07-03 16:57:00" "2012-07-03 16:57:00" "2012-07-03 16:57:00" ... 
$ daynight  : chr "night" "night" "night" "night" ... 

我似乎無法找到任何明顯的錯誤與我的公式。我已經檢查過以確保沒有列長度不匹配的錯誤,並且我沒有看到任何缺少的括號,逗號或+。我將我的代碼與使用mgcv軟件包的一些同事進行了比較,但我無法弄清楚這個問題。有什麼建議麼?

謝謝你的幫助。

回答

2

問題是這樣的

na.action = TRUE 

na.action需要一個功能,你通過它的邏輯,(從?bam

na.action : a function which indicates what should happen when the data contain NA s. The default is set by the na.action setting of options , and is na.fail if that is unset. The factory-fresh default is na.omit .

從本質上講,內model.frame()你基本要求R鍵評估

TRUE(df) 

它正確地拋出一個錯誤爲TRUE不是一個函數,但被稱爲一個。

如果你想與NA s到省略行,而不是如果發生故障,使用

na.action = na.omit 
+1

如果'model.frame'抓住了這個用戶的錯誤有更翔實的錯誤消息,這可能是好的。 – Roland

+1

@Roland Yup;我讓學生們犯了同樣的錯誤。也許最好,但是如果調用TRUE(1)時拋出的錯誤實際上包含了調用或者用戶試圖調用的函數。 –

+0

@GavinSimpson錯誤消息讓我看着命令的完全不同的部分。謝謝您的幫助。這解決了問題。 – ebyrnes24