[R] Using objects within functions in formulas

David Winsemius dwinsemius at comcast.net
Wed Jan 9 19:33:17 CET 2013


On Jan 9, 2013, at 8:53 AM, Aidan MacNamara wrote:

> Dear all,
>
> I'm looking to create a formula within a function to pass to glmer()
> and I'm having a problem that the following example will illustrate:
>
> library(lme4)
> y1 = rnorm(10)
> x1 = data.frame(x11=rnorm(10), x12=rnorm(10), x13=rnorm(10))
> x1 = data.matrix(x1)
> w1 = data.frame(w11=sample(1:3,10, replace=TRUE), w12=sample(1:3,10,
> replace=TRUE), w13=sample(1:3,10, replace=TRUE))
>
> test1 <- function(x2, y2, w2) {
>
> 	print(str(w2))
> 	form = as.formula(paste("y2 ~ x2 +" ,paste("(1|w2$", names(w2), ")",
> collapse=" + ", sep="")))
> 	m1 = glmer(form)
> 	return(m1)
> }
>
> model1 = test1(x2=x1, y2=y1, w2=w1)
>
> As can be seen from the print statement within the function, the
> object "w2" is present and is a data frame. However, the following
> error occurs:
>
> Error in is.factor(x) : object 'w2' not found

Generally regression functions in R will be expecting to get one  
'data' argument and build formulas using column names from that object.

  test1 <- function(x2, y2, w2) {
    w3 <- cbind(w2, x2, x2)
	print(str(w3))
	form = as.formula(paste("y2 ~ x2 +" ,paste("(1|", names(w2), ")",
collapse=" + ", sep="")))
	m1 = glmer(form, data=w3); print(summary(m1))
	return(m1)
     }

model1 = test1(x2=x1, y2=y1, w2=w1)


>
> This can be rectified by making 'w2' global - defining it outside the
> function. I know there are issues with defining formulas and
> environment but I'm not sure why this problem is specific to 'w2' and
> not the other objects passed to the function.
>
> Any help would be appreciated.
>
> Aidan MacNamara
> EMBL-EBI
>


David Winsemius, MD
Alameda, CA, USA




More information about the R-help mailing list