As a followup to my question yesterday, what if I were to return the argument as a list, and then "unwrap" the list with the function I've written called "objects". Is there any problems with doing it? It works to use it inside other functions. For example:
================================= > objects <- function(alist) { for (vars in names(alist)) assign(vars,alist[[vars]],pos=sys.frame(-1)) } > simple <- function(m,n) { A=matrix(c(3,3,2,3),2,2) B=m c=1:n list(A=A,B=B,c=c) } > rm(A,B,c) #just in case they exist > stuff=simple(2,3) > objects(stuff) > A [,1] [,2] [1,] 3 2 [2,] 3 3 > B [1] 2 > c [1] 1 2 3 > ================================= -Scott ***************************************************************** Scott K. Hyde Assistant Professor of Statistics and Mathematics College of Math and Sciences Brigham Young University -- Hawaii Laie, HI 96762 On Tue, Jun 2, 2009 at 5:30 PM, Scott Hyde <hy...@byuh.edu> wrote: > > I'd like to perform return variable assignments like matlab. For example, > the following function would return A, B, and c to the script that called it. > > ================================= > function [A,B,c] = simple(m,n) > A=[ 3 2; 3 3] > B=m > c=1:n > ================================= > > I'd like to do similar assignments in R, but I seem to be able to only return > one variable. I tried to use a list to return all the arguments, but then > each has to be referred to using the list. For example: > > ================================= > simple <- function(m,n) { > A=matrix(c(3,3,2,3),2,2) > B=m > c=1:n > list(A=A,B=B,c=c) > } > > > stuff=simple(2,3) > > stuff > $A > [,1] [,2] > [1,] 3 2 > [2,] 3 3 > > $B > [1] 2 > > $c > [1] 1 2 3 > ================================= > > Then I could assign each variable like this (which is what I'd like to avoid): > > ================================= > A=stuff$A > B=stuff$B > c=stuff$c > rm(stuff) #stuff isn't needed anymore. > ================================= > > > I've even toyed with the superassignment operator, which also works, but I > think it doesn't work for functions of functions. The following example > works. > > ================================= > simple2 <- function(m,n) { > A <<- matrix(c(3,3,2,3),2,2) > B <<- m > c <<- 1:n > } > > > stuff2=simple2(2,3) > > stuff2 > [1] 1 2 3 > > A > [,1] [,2] > [1,] 3 2 > [2,] 3 3 > > B > [1] 2 > > c > [1] 1 2 3 > ================================= > > In the example below, I call the function ten inside the function nine. I'm > expecting that the variable b should change only in the function nine (and > not in the global environment). In other words, I think the line "(nine) b= > 9" should be "(nine) b= 10". > > Can someone help me know how to do this correctly? > > -Scott > > ================================= > nine = function(a) { > b <- 9 > ten(a) > print(paste("(nine) b=",b)) > } > > ten = function(d) { > b <<- 10 > print(paste("(ten) b=",b)) > print(paste("(ten) d=",d)) > d > } > > > nine(5) > [1] "(ten) b= 10" > [1] "(ten) d= 5" > [1] "(nine) b= 9" > > b > [1] 10 > ================================= > ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.