【问题标题】:Generalized additive model data.frame.default error: attempting to apply nonfunction广义加法模型 data.frame.default 错误:尝试应用非功能
【发布时间】:2016-07-15 16:55:58
【问题描述】:

我正在尝试使用 mgcv 包运行一般附加模型,但我不断收到 model.frame.default 错误:

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

这是我正在使用的代码(由于数据集的大小,我使用“bam()”):

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 包的同事进行了比较,但我无法找出问题所在。有什么建议吗?

感谢您的帮助。

【问题讨论】:

    标签: r gam mgcv


    【解决方案1】:

    问题是这样的

    na.action = TRUE
    

    na.action 需要一个函数,而你传递给它一个逻辑,(来自?bam

    na.action: 一个函数,它指示当数据发生时应该发生什么 包含NAs。默认由na.action 设置 options,如果未设置,则为 na.fail。这 factory-fresh 默认是na.omit

    基本上,在model.frame() 中,您基本上是在要求 R 进行评估

    TRUE(df)
    

    正确地引发错误,因为 TRUE 还不是一个函数,但被称为一个函数。

    如果您想省略带有NAs 的行而不是在它们出现时失败,请使用

    na.action = na.omit
    

    【讨论】:

    • 如果model.frame 捕捉到这个用户错误并提供更多信息的错误消息可能会很好。
    • @Roland 是的;我有学生犯过同样的错误。但是,如果在调用 TRUE(1) 时抛出的错误实际上包括调用或用户试图作为函数调用的内容,那么也许最好。
    • @GavinSimpson 错误消息让我看到了命令的完全不同的部分。谢谢您的帮助。这解决了问题。
    猜你喜欢
    • 2013-04-27
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 2018-02-03
    • 2018-10-09
    相关资源
    最近更新 更多