The problem in this specific case
The right hand side of your formula is 1
, which makes it a null model. coxph
calls coxph.fit
, which (perhaps lazily) doesn't bother to return coefficients for null models.
Later coxph
calls extractAIC
, which erroneously assumes that the model object contains an element named coefficients
.
The general case
is.na
assumes that its input argument is an atomic vector or a matrix or a list or a data.frame. Other data types cause the warning. It happens with NULL
, as you've seen:
is.na(NULL)
## logical(0)
## Warning message:
## In is.na(NULL) : is.na() applied to non-(list or vector) of type 'NULL'
One common cause of this problem is trying to access elements of a list, or columns of a data frame that don't exist.
d <- data.frame(x = c(1, NA, 3))
d$y # "y" doesn't exist is the data frame, but NULL is returned
## NULL
is.na(d$y)
## logical(0)
## Warning message:
## In is.na(d$y) : is.na() applied to non-(list or vector) of type 'NULL'
You can protect against this by checking that the column exists before you manipulate it.
if("y" in colnames(d))
{
d2 <- d[is.na(d$y), ]
}
The warning with other data types
You get a simliar warning with formulae, functions, expressions, etc.:
is.na(~ NA)
## [1] FALSE FALSE
## Warning message:
## In is.na(~NA) : is.na() applied to non-(list or vector) of type 'language'
is.na(mean)
## [1] FALSE
## Warning message:
## In is.na(mean) : is.na() applied to non-(list or vector) of type 'closure'
is.na(is.na)
## [1] FALSE
## Warning message:
## In is.na(is.na) : is.na() applied to non-(list or vector) of type 'builtin'
is.na(expression(NA))
## [1] FALSE
## Warning message:
## In is.na(expression(NA)) :
## is.na() applied to non-(list or vector) of type 'expression'