[R] modifying arrays within functions

Wittner, Ben, Ph.D. Wittner.Ben at mgh.harvard.edu
Tue Feb 5 17:25:02 CET 2008


In general functions changing global variables as a side effect is dangerous
(i.e., often leads to programming errors and difficult-to-maintain code).

So, if the performance of the following is sufficient, it is what I would
recommend.

addition <- function(X, a) {

  X[1, 1] <- X[1, 1] + a

  X

}

X <- array(1, dim=c(2, 2))

X <- addition(X, a)

Sometimes for performance reasons or when programming an event-driven user
interface you need functions to alter global data as a side effect.
In that case

addition <- function(a) {

  X[1, 1] <<- X[1, 1] + a

}

-Ben

> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org]
> On Behalf Of Konrad BLOCHER
> Sent: Tuesday, February 05, 2008 10:52 AM
> To: r-help at r-project.org
> Subject: [R] modifying arrays within functions
> 
> 
> Hi,
> 
> I'm pretty new to R and seem to be having difficulties with writing a
> function that would change an array and keep the change after the function
> finishes its work.
> 
> in other words
> 
> I have an array of 1's    X<-array(1,dim=c(2,2))
> 
> I want to add a number to X[1,1] by means of a function called addition.
> What I am writing is:   addition<-function(a){X[1,1]=X[1,1}+a}
> but it doesn't seem to work
> 
> Any ideas? Please? :)
> 
> Thanks
> 
> KB
> 
> ______________________________________________
> 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.

The information transmitted in this electronic communication is intended only
for the person or entity to whom it is addressed and may contain confidential
and/or privileged material. Any review, retransmission, dissemination or other
use of or taking of any action in reliance upon this information by persons or
entities other than the intended recipient is prohibited. If you received this
information in error, please contact the Compliance HelpLine at 800-856-1983 and
properly dispose of this information.



More information about the R-help mailing list