[R] transform input argument (matrix) of function

David Winsemius dwinsemius at comcast.net
Sat Nov 17 17:55:15 CET 2012


On Nov 17, 2012, at 7:41 AM, Omphalodes Verna wrote:

> Dear list!
>
> I would like to write a function to transform matrix, which is input  
> argument of a written function. It is easy with new matrix (see  
> below), but my idea is to transform input argument (matrix) of  
> function without any additional matrixes. Here is an example:
>
> fun1 <- function(xy) {
> xy <- cbind(xy[,1], xy[,2], xy[,1] + xy[,2])
> return(xy)
> }
>
> df1 <- matrix(c(1,2,3,1,2,3), ncol = 2)
> fun1(df1)
>
> fun2 <- function(xy) {
> xy <- cbind(xy[,1], xy[,2], xy[,1] + xy[,2])
> return(invisible(xy))
> }
>
> fun2(df1)
> df1
>> should be

No, it should not be a three column matrix. When you call a function  
with an appropriate argument and fail fail to assign it to anything,  
the result evaporates.

?'<-'
?assign

Functions generally do not modify objects "in place". If you wanted to  
have df1 be the result of fun2(df1) you would have needed to do this:

df1 <- fun2(df1)

  There are ways to get around that limitation (described in each of  
those help pages), but I think it is better for one to learn ordinary  
functional programming conventions first.

>      [,1] [,2] [,3]
> [1,]    1    1    2
> [2,]    2    2    4
> [3,]    3    3    6
>
> Thanks to all for help,
> OV
> 	[[alternative HTML version deleted]]

This persistent practice after multiple postings to Rhelp  marks you  
as someone either having difficulty in reading the Posting Guide.

> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html

-- 
David Winsemius, MD
Alameda, CA, USA




More information about the R-help mailing list