I am trying to write a wrapper around `lm`

that allows the user to specify the optional keywords to `lm`

within the formula. For example, to estimate a linear model of `y`

on `x`

with weights `w`

using the dataset `d`

, I would like for the user to be able to write `newlm(y ~ x | w, d)`

.

As you might guess, the real problem I am working on is more complicated than this, but I am actually stuck on the step of transforming `newlm(y ~ x | w, d)`

into a call to `lm(y ~ x, data = d, weights = w)`

.

While I think I understand how to extract the `w`

part from the formula above, using the `Formula`

package, I can't figure out how to tell `lm`

to use it. My best guess looks like this:

```
newlm <- function(f, d) {
f <- Formula(f)
f1 <- formula(f, lhs = 1, rhs = 1)
f2 <- formula(f, lhs = 0, rhs = 2)
return(lm(f1, data = d, weights = f2)
}
```

I'm sure that `weights = f2`

isn't right, but I can't quite figure out what is. `quo`

, `enquo`

, `substitute`

and a bunch of other things in http://dplyr.tidyverse.org/articles/programming.html I've tried don't quite work. My guess is that this is somehow possible, but I can't figure out exactly how.

Note: the examples above don't technically have any `tidy`

in them, but my real problem involves using the variable `w`

inside a bunch of `dplyr`

expressions, so I have already successfully referred to `w`

with a `!!w`

step in those expressions.

Thanks in advance for any suggestions.