Try this:
e <- new.env()
a <- list()
b <- list()
set.seed(123)
a[[1]] <- matrix(rnorm(20), 2)
b[[1]] <- matrix(rnorm(20), 2)
e$a <- a
e$b <- b
environment(f<-as.formula("a~b", env = e))
teste = function(arg1){
#Aqui poderia ser realizada qualquer operação desde que acessasse "a" e "b" e retornasse essa operação em forma de outro ambiente.
f<-arg1
ne<-environment(f)
xs<-sapply(all.vars(f),get,envir=ne)
res<-Reduce("+",xs) # (a+b)
ge <- new.env()
ge$res<-res
ge
}
ds<-teste(f)
ds$res
get("res", ds)
> get("res", ds)
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] -1.6282994 0.5327039 -0.49575153 1.298703 -1.824990 1.65054602 1.2958971
[2,] -0.4481524 -0.6583828 0.02837168 -1.111688 0.808153 0.06474234 0.9888162
[,8] [,9] [,10]
[1,] 0.2657399 1.051768 0.3953932
[2,] 2.4755534 -2.028529 -0.8532624