[R] Return variable assignments from a function

Ronggui Huang ronggui.huang at gmail.com
Wed Jun 3 05:42:28 CEST 2009


I don't know why you want to do this. But you can try _assign_

simple <- function(m,n) {
 assign("A",matrix(c(3,3,2,3),2,2),env=.GlobalEnv)
 assign("B",m,env=.GlobalEnv)
assign("c",1:n,env=.GlobalEnv)
}
> simple(5,4)
> A
     [,1] [,2]
[1,]    3    2
[2,]    3    3
> B
[1] 5


Ronggui

2009/6/3 Scott Hyde <hydes at byuh.edu>:
> 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
> =================================
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at 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.
>



-- 
HUANG Ronggui, Wincent
PhD Candidate
Dept of Public and Social Administration
City University of Hong Kong
Home page: http://asrr.r-forge.r-project.org/rghuang.html




More information about the R-help mailing list