Было бы лучше избежать этого при создании формулы. (Например, проверьте, если xfoo
равно NA
, прежде чем включить ее в формулу.) Без нее у вас будет недопустимая формула, и, возможно, самый простой способ ее обработки - преобразовать ее в символ, опустить NA и затем преобразовать обратно в формулу. Примерно так:
f <- function(fml){
acf <- as.character(fml)
rhs <- trimws(strsplit(acf[3], "+", fixed=TRUE)[[1]])
rhs <- rhs[!rhs %in% "NA"]
rhs <- paste(rhs, collapse = " + ")
as.formula(paste(acf[2], acf[1], rhs))
}
> f(y ~ x1+x3+NA+x13+NA+x19)
y ~ x1 + x3 + x13 + x19
<environment: 0x0000000019181808>
Обратите внимание, что в формуле также есть среда ... поэтому, если вы решите использовать отдельную функцию для преобразования формулы (как описано выше), может быть полезно вернуть строку символов (т.е. пропустить as.formula
в последнем строка) и преобразовать его в формулу, когда функция вернулась. (Например, as.formula(f(y~bla + NA + bla))
). Кроме того, вы можете изменить среду формулы.