如何检查R中不一致的公式

时间:2017-05-30 15:35:22

标签: r r-model-formula

在R中,我想测试formula用户是否在formula中指定了拦截。目前我正在使用函数terms。在下列情况下,我得到了所需的输出

terms(y ~ x)      #found an intercept
terms(y ~ 1 + x)  #found an intercept
terms(y ~ 0 + x)  #found no intercept
terms(y ~ -1 + x) #found no intercept

但是在用户提供不一致输入的情况下,我从terms获得关于截距规范的(imo random)结果。

terms(y ~ -1 + 1 + x) #found an intercept
terms(y ~ 1 - 1 + x)  #found no intercept
terms(y ~ 0 + 1 + x)  #found an intercept
terms(y ~ 1 + 0 + x)  #found no intercept

我真正想要的是terms在这些情况下抛出错误或警告。这可能是terms,还是我必须“手动”(通过正则表达式等)对一致性进行此类检查?

1 个答案:

答案 0 :(得分:1)

如果公式fo有截距,则此值为1,否则为

has_intercept <- attr(terms(fo), "intercept")

所以如果有拦截,这将产生错误:

if (has_intercept) stop("Intercept is not allowed")

关于问题中不一致的评论,它的工作方式似乎是它从左到右并使用最后遇到的一个,例如,y ~ 0 + 1 + x有一个拦截,y ~ 1 + 0 + x做不

为了保持一致性,通常最好坚持R的规则,而不是制定自己的不同规则。