2015-04-10 15 views
7

Ho un frame di dati e una formula memorizzato in variabili:Rimuovere variabile da RHS di una formula che ha un punto

> d <- data.frame(cls=1, foo=2, bar=3) 
> f <- formula(cls ~ .) 

vorrei rimuovere una variabile dal RHS di questa formula programatically (in il mio codice, il nome di questa variabile verrebbe passato da qualche parte sotto forma di stringa). Ho provato ad utilizzare update.formula:

> update(f, .~.-foo)  
Error in terms.formula(tmp, simplify = TRUE) : 
    '.' in formula and no 'data' argument 

Poi ho provato a fornire l'argomento data:

> update(f, .~.-foo, data=d) 
Error in terms.formula(tmp, simplify = TRUE) : 
    '.' in formula and no 'data' argument 

So che quanto sopra potrebbe funzionare se la formula iniziale non ha avuto un punto sul lato destro:

> f <- formula(cls ~ foo + bar) 
> update(f, .~.-foo) 
cls ~ bar 

Come rimuovere una variabile da RHS di una formula se non riesco a garantire che RHS non contenga un punto?

+1

questo funziona nel contesto di 'lm()'. Sono sorpreso che non funzioni qui. –

risposta

5
update(terms(f, data = d), . ~ . - foo) 
# cls ~ bar