I tried to call lme from a function and found that it failed with "object not found" errors and did other stupid things, like always returning the same result in a loop. It turns out that lme uses the global environment and gets confused if you put it in a function with locally-scoped variables. The hack is to temporarily make your variable a global:
lmefunc <- function() { lmspecies <<- data[[foo]] lmmod <- lme(lmspecies ~ foo + bar, data = baz) rm(lmspecies, envir=globalenv()) }
Note the use of the <<- operator to assign in the global environment.