Hi guys, Very new to R and your help would be highly appreciated for the following problem. I am trying to create a simple function which registers values within an array through a for loop. These are the steps I have followed: 1) Declared 2 global matrices 2) Create function mat() with i as an input 3) constructed the for loop 4) called mat(2) The problem is that when i try to get y[4] and f[5] the output is: [1] NA my concern is that i am not addressing any of the following topics: 1) definition of global variable 2) the argument does not go through the for loop 3) the matrices definition is not correct 4) other Please check my code below: y=c(NA) f=c(NA) mat<-function(i) { for (k in i:10) { y[k]=k+1 f[k]=y[k-1]/2 } } mat(2) Any thoughts or recommendations would be highly appreciated. Thanks in advance, N -- View this message in context: http://r.789695.n4.nabble.com/Simple-Function-tp3035572p3035572.html Sent from the R help mailing list archive at Nabble.com. [[alternative HTML version deleted]]
Hi guys, Very new to R and your help would be highly appreciated for the following problem. I am trying to create a simple function which registers values within an array through a for loop. These are the steps I have followed: 1) Declared 2 global matrices 2) Create function mat() with i as an input 3) constructed the for loop 4) called mat(2) The problem is that when i try to get y[4] and f[5] the output is: [1] NA my concern is that i am not addressing any of the following topics: 1) definition of global variable 2) the argument does not go through the for loop 3) the matrices definition is not correct 4) the function do not return any values 4) other.. My code is listed below: y=c(NA) f=c(NA) mat<-function(i) { for (k in i:10) { y[k]=k+1 f[k]=y[k-1]/2 } } mat(2) Any thoughts or recommendations would be highly appreciated. Thanks in advance, N -- View this message in context: http://r.789695.n4.nabble.com/Simple-Function-tp3035585p3035585.html Sent from the R help mailing list archive at Nabble.com.
If you want to assign to a variable in your workspace, rather than a local variable in your function, you can use the <<- operator (double headed arrow) like this... mat <- function(i) { for (k in i:10) { y[k] <<- k+1 f[k] <<- y[k-1] / 2 } } Type ?"<<-" for the help page. Michael On 10 November 2010 18:09, rnick <nikos.rachmanis at gmail.com> wrote:> > Hi guys, > > Very new to R and your help would be highly appreciated for the following > problem. I am trying to create a simple function which registers values > within an array through a for loop. These are the steps I have followed: > > 1) Declared 2 global matrices > 2) Create function mat() with i as an input > 3) constructed the for loop > 4) called mat(2) > > The problem is that when i try to get y[4] and f[5] the output is: [1] NA > > my concern is that i am not addressing any of the following topics: > 1) definition of global variable > 2) the argument does not go through the for loop > 3) the matrices definition is not correct > 4) the function do not return any values > 4) other.. > > My code is listed below: > > y=c(NA) > f=c(NA) > mat<-function(i) > { > ? ? ? ?for (k in i:10) > ? ? ? ?{ > ? ? ? ? ? ? ? ?y[k]=k+1 > ? ? ? ? ? ? ? ?f[k]=y[k-1]/2 > ? ? ? ?} > } > mat(2) > > Any thoughts or recommendations would be highly appreciated. > > Thanks in advance, > > N > -- > View this message in context: http://r.789695.n4.nabble.com/Simple-Function-tp3035585p3035585.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > 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. >
Hi Nikos. There is quite a bit going on here, both in the code and in your terminology. You should really consider reading "An introduction to R" that comes with your R installation. A few pointers though: * in R speak, you have nowhere "declared 2 global matrices": it is not completely clear why you use code like "y<-c(NA)" to try to achieve such a thing, but if I'm not mistaken, this creates a logical vector of length 1. Surely not a matrix. * operator <- only looks for variables in the environment in which they are evaluated, as does = (note: I would advise you to use <- in R as an assignment operator instead of =). If you want to change variables in other environments, particularly the global environment, you need to use <<- (?<<- does not seem to work to get you to its help page, but open R help, then find the search page and search for <<-, for more information). * apart from that: you may want to avoid the for loop here altogether: y[i:10]<-(i:10)+1 f[i:10]<-y[(i-1):9]/2 gives you the same result, but more in the R fashion (in general, you want to avoid explicit for loops in R) HTH, Nick Sabbe -- ping: nick.sabbe at ugent.be link: http://biomath.ugent.be wink: A1.056, Coupure Links 653, 9000 Gent ring: 09/264.59.36 -- Do Not Disapprove -----Original Message----- From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of rnick Sent: woensdag 10 november 2010 7:51 To: r-help at r-project.org Subject: [R] Simple Function Hi guys, Very new to R and your help would be highly appreciated for the following problem. I am trying to create a simple function which registers values within an array through a for loop. These are the steps I have followed: 1) Declared 2 global matrices 2) Create function mat() with i as an input 3) constructed the for loop 4) called mat(2) The problem is that when i try to get y[4] and f[5] the output is: [1] NA my concern is that i am not addressing any of the following topics: 1) definition of global variable 2) the argument does not go through the for loop 3) the matrices definition is not correct 4) other Please check my code below: y=c(NA) f=c(NA) mat<-function(i) { for (k in i:10) { y[k]=k+1 f[k]=y[k-1]/2 } } mat(2) Any thoughts or recommendations would be highly appreciated. Thanks in advance, N -- View this message in context: http://r.789695.n4.nabble.com/Simple-Function-tp3035572p3035572.html Sent from the R help mailing list archive at Nabble.com. [[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.