Thaler, Thorn, LAUSANNE, Applied Mathematics
2010-Jun-21 09:30 UTC
[R] list() assigning the same value to two items
Hi everybody, I'd like to have a list with two elements, where both elements have the same value: z <- list(a=1, b=1) If it happens, that I've to change the value, I've to assure that I change both. This is error prone. Hence, a better way to achieve this is to define: tmp <- 1 z <- list(a=tmp, b=tmp) Now, I'm wondering if it is possible to make this more compact: z <- list(a=tmp<-1, b=tmp) Both approaches have the side effect that a variable "tmp" is created. So is there a way to achieve the same thing without having to define an additional variable? Something like z <- list(a=1, b=a) or even z <- list(a=b=1)? Both commands don't work of course, but I'm just curious whether this is possible in principle (a rather academic question I've to admit) Thanks + BR, Thorn Thaler Applied Mathematics Group Nestl? Research Center PO Box 44 CH-1000 Lausanne 26, Switzerland Phone: + 41 21 785 8220 Fax: + 41 21 785 8556
On 2010-06-21 3:30, Thaler, Thorn, LAUSANNE, Applied Mathematics wrote:> Hi everybody, > > I'd like to have a list with two elements, where both elements have the same value: > > z<- list(a=1, b=1) > > If it happens, that I've to change the value, I've to assure that I change both. This is error prone. Hence, a better way to achieve this is to define: > > tmp<- 1 > z<- list(a=tmp, b=tmp) > > Now, I'm wondering if it is possible to make this more compact: > z<- list(a=tmp<-1, b=tmp) > > Both approaches have the side effect that a variable "tmp" is created. So is there a way to achieve the same thing without having to define an additional variable? Something like > > z<- list(a=1, b=a) > > or even > > z<- list(a=b=1)? > > Both commands don't work of course, but I'm just curious whether this is possible in principle (a rather academic question I've to admit) >f <- function(x){ list(a=x, b=x) } z <- f(1) etc. -Peter Ehlers> Thanks + BR, > > Thorn Thaler > Applied Mathematics Group > Nestl? Research Center > PO Box 44 > CH-1000 Lausanne 26, Switzerland > Phone: + 41 21 785 8220 > Fax: + 41 21 785 8556 >
One approach is to use the within function:> within(list(), {a<-1; b<-a})$b [1] 1 $a [1] 1 Now, whether that is simpler or more compact than other options is for you (or other users) to decide. Hope this helps, -- Gregory (Greg) L. Snow Ph.D. Statistical Data Center Intermountain Healthcare greg.snow at imail.org 801.408.8111> -----Original Message----- > From: r-help-bounces at r-project.org [mailto:r-help-bounces at r- > project.org] On Behalf Of Thaler, Thorn, LAUSANNE, Applied Mathematics > Sent: Monday, June 21, 2010 3:30 AM > To: r-help at r-project.org > Subject: [R] list() assigning the same value to two items > > Hi everybody, > > I'd like to have a list with two elements, where both elements have the > same value: > > z <- list(a=1, b=1) > > If it happens, that I've to change the value, I've to assure that I > change both. This is error prone. Hence, a better way to achieve this > is to define: > > tmp <- 1 > z <- list(a=tmp, b=tmp) > > Now, I'm wondering if it is possible to make this more compact: > z <- list(a=tmp<-1, b=tmp) > > Both approaches have the side effect that a variable "tmp" is created. > So is there a way to achieve the same thing without having to define an > additional variable? Something like > > z <- list(a=1, b=a) > > or even > > z <- list(a=b=1)? > > Both commands don't work of course, but I'm just curious whether this > is possible in principle (a rather academic question I've to admit) > > Thanks + BR, > > Thorn Thaler > Applied Mathematics Group > Nestl? Research Center > PO Box 44 > CH-1000 Lausanne 26, Switzerland > Phone: + 41 21 785 8220 > Fax: + 41 21 785 8556 > > ______________________________________________ > 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.