Question:

I am trying to write an R function to run a weighted (optional) regressions, and I am having difficulties getting the weight variable to work. Here is a simplified version of the function.

```
HC <- function(data, FUN, formula, tau = 0.5, weights = NULL){
if(is.null(weights)){
est <- FUN(data = data, formula = formula, tau = tau)
intercept = est$coef[["(Intercept)"]]
zeroWorker <- exp(intercept)
}
else {
est <- FUN(data = data, formula = formula, tau = tau, weights = weights)
intercept = est$coef[["(Intercept)"]]
zeroWorker <- exp(intercept)
}
return(zeroWorker)
}
```

The function works perfectly if I do not use the weights argument.

```
mod1 <- HC(data = mydata, formula = lin.model, tau = 0.2,
FUN = rq)
```

But, throws an error message when I use the weights argument.

```
mod2 <- HC(data = mydata, formula = lin.model, tau = 0.2,
FUN = rq, weights = weig)
```

I google the problem, and this post seems to be the closest to my problem, but I could still not get it to work. <a href="https://stackoverflow.com/questions/10858318/r-pass-argument-to-glm-inside-an-r-function" rel="nofollow">R : Pass argument to glm inside an R function</a>. Any help will be appreciated. My problem can be replicated with:

```
library("quantreg")
data(engel)
mydata <- engel
mydata$weig <- with(mydata, log(sqrt(income))) # Create a fictive weigth variable
lin.model <- foodexp~income
mod1 <- HC(data = mydata, formula = lin.model, tau = 0.2,
FUN = rq) # This works perfectly
mod2 <- HC(data = mydata, formula = lin.model, tau = 0.2,
FUN = rq, weights = weig) # throws an error.
```

Error in HC(data = mydata, formula = lin.model, tau = 0.2, FUN = rq, weights = weig) : object 'weig' not found

Answer1:You have two problems. The error you're encountering is because you're trying to use the `weigh`

variable without referencing it as coming from the `mydata`

dataset. Try using `mydata$weig`

. This will solve your first error, but you then get the actual one related to using the `weights`

argument, which is:

```
Error in model.frame.default(formula = formula, data = data, weights = substitute(weights), :
invalid type (symbol) for variable '(weights)'
```

The solution is to add the variable specified in `HC`

's `weights`

argument to the dataframe before passing it to `FUN`

:

```
HC <- function(data, FUN, formula, tau = 0.5, weights = NULL){
data$.weights <- weights
if(is.null(weights)){
est <- FUN(data = data, formula = formula, tau = tau)
} else {
est <- FUN(data = data, formula = formula, tau = tau, weights = .weights)
}
intercept = est$coef[["(Intercept)"]]
zeroWorker <- exp(intercept)
return(zeroWorker)
}
```

Then everything works:

```
mod2 <- HC(data = mydata, formula = lin.model, tau = 0.2, FUN = rq, weights = mydata$weig)
mod2
# [1] 4.697659e+47
```