attr(terms(x~y), 'intercept')
будет делать то, что вы хотите.
formula <- x~y
formula2 <- x~y-1 # no intercept
attr(terms(formula), 'intercept')
## [1] 1
attr(terms(formula2), 'intercept')
## [1] 0
РЕДАКТИРОВАТЬ: я изначально неправильно понял вопрос. Если вы ищете конкретный пример, который будет искать, содержит ли формула только перехват, вы можете использовать:
f1 <- x ~ y
f2 <- x ~ y-1
f3 <- x ~ 1
f3 <- x ~ 0
onlyIntercept <- function(f){
return(attr(terms(f), 'intercept') & length(attr(terms(f), 'factors')) == 0)
}
# Examples on above, then on OPs examples:
onlyIntercept(f1)
## [1] FALSE
onlyIntercept(f2)
## [1] FALSE
onlyIntercept(f3)
## [1] TRUE
onlyIntercept(f4)
## [1] FALSE
onlyIntercept(as.formula('X~ 1'))
## [1] TRUE
onlyIntercept(as.formula('X~1'))
## [1] TRUE
onlyIntercept(as.formula('X ~1'))
## [1] TRUE
Функция onlyIntercept
, которую я здесь определяю, проверяет, равен ли атрибут перехвата 0 или 1, и проверяет, есть ли какие-либо дополнительные факторы (переменные), которые обычно включаются в модель. Если его нет, этот атрибут имеет длину 0 и может быть легко проверен.