[R] Using a Data Frame/Matrix outside a function

David Winsemius dwinsemius at comcast.net
Thu Apr 1 18:35:40 CEST 2010


On Apr 1, 2010, at 12:16 PM, Greg Gilbert wrote:

>
> I have code that creates the same matrices , "a" and "b". The code  
> creating
> "a" is not in a function and the code creating "b" is in a function.  
> I would
> like to do operations on "b" like I can on "a", however I can't  
> figure out
> how I can return a matrix (or data frame) from a function. Thanks  
> for your
> help!
>
>> r <- 5; c <- 5
>> a <- matrix(NA,nrow=5, ncol=5)
>>   for(i in 1:r) {
> +       for (j in 1:c) {
> +          if(i==j) a[i, j] <- i
> +       }
> +    }
>>
>> diag(a)
> [1] 1 2 3 4 5
>>
>> data.out <- function(r, c) {
> +    b <- matrix(NA,nrow=r, ncol=c)
> +    for(i in 1:r) {
> +       for (j in 1:c) {
> +          if(i==j) b[i, j] <- i
> +       }
> +    }
> + }
>>
>> data.out(5, 5)
>> diag(b)
> Error in diag(b) : object 'b' not found

The "b" object only existed while the function was being processed. At  
the conclusion of the function's activities the b object did not get  
returned as the result . Had you returned "b" or made it the last  
object evaluated (inside the function), the results of data.out(5,5)  
it would have still been accessible. Try this instead

data.out <- function(r, c) {
     b <- matrix(NA,nrow=r, ncol=c)
     for(i in 1:r) {
        for (j in 1:c) {
           if(i==j) b[i, j] <- i
        }
     }
  b}  # or equivalently return(b)

 > diag(data.out(5,5))
[1] 1 2 3 4 5


-- 
David



More information about the R-help mailing list