Thanks, works as expected. But maybe I've to be a bit more clear about the reason why I'd like to have such a construct.
In lattice you can define some parameters by passing a named list to par.settings. Suppose I want to superpose two lines and use colors different from the default:
xyplot(1:10~c(1:5,1:5), type="o", groups=rep(1:2,each=5), par.settings=list(superpose.line=list(col=1:2), superpose.symbol=list(col=1:2)))
I have to specify the same setting for superpose.line and superpose.symbol. If I'd use your proposition, I've to hardcode the respective item names. It is still an academic question, for there are thousands of ways to solve this issue, but I was just curious whether it is possible to find an one-liner without the need of specifying any temp variable.
BR, Thorn
-----Original Message-----
From: Peter Ehlers [mailto:ehlers at ucalgary.ca]
Sent: lundi 21 juin 2010 11:47
To: Thaler,Thorn,LAUSANNE,Applied Mathematics
Cc: r-help at r-project.org
Subject: Re: [R] list() assigning the same value to two items
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
>