2016-07-15 109 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