On May 10, 2015, at 6:11 AM, ce wrote:
>
> yes indeed :
>
> foo <- lapply(foo, function(x) if(x[1] == 1 ) {x[2] <- 0; x }else{x} )
>
> would work. But if the list is too long, would it be time consuming rather
> than just updating elements that meet the if condition?
Any change to an object will require copying the entire object. That is the
computing model that R uses. If you had presented a modification strategy that
used logical or numeric indexing to effect only targeted nodes of a list, it
still would have ended up copying the whole object.
The data.table package was invented in large part to get around that design
concern.
--
David.
>
> thx
> ce
>
>
> -----Original Message-----
> From: "David Winsemius" [[email protected]]
> Date: 05/09/2015 08:00 PM
> To: "ce" <[email protected]>
> CC: [email protected]
> Subject: Re: [R] how to update a value in a list with lapply
>
>
> On May 9, 2015, at 4:35 PM, ce wrote:
>
>> Dear All,
>>
>> I have a list, using lapply I find some elements of the list, and then I
>> want to change the values I find. but it doesn't work:
>>
>> foo<-list(A = c(1,3), B =c(1, 2), C = c(3, 1))
>> lapply(foo, function(x) if(x[1] == 1 ) x )
>> $A
>> [1] 1 3
>>
>> $B
>> [1] 1 2
>>
>> $C
>> NULL
>>
>> lapply(foo, function(x) if(x[1] == 1 ) x[2] <- 0 )
>> $A
>> [1] 0
>>
>> $B
>> [1] 0
>>
>> $C
>> NULL
>>
>>> lapply(foo, function(x) if(x[1] == 1 ) x )
>> $A
>> [1] 1 3
>>
>> $B
>> [1] 1 2
>>
>> $C
>> NULL
>>
>>
>> how to do it correctly ?
>
> I find it useful to think of the `if` function as `if(cond){cons}else{alt}`
>
> lapply(foo, function(x) if(x[1] == 1 ) {x[2] <- 0; x }else{x} )
> #-----
> $A
> [1] 1 0
>
> $B
> [1] 1 0
>
> $C
> [1] 3 1
>
>
> You were not supply an alternative which was the cause of the NULL (and you
> were not returning a value which meant that the value returned was the value
> on the RHS of the assignment).
>
> --
>
> David Winsemius
> Alameda, CA, USA
>
>
David Winsemius
Alameda, CA, USA
______________________________________________
[email protected] mailing list -- To UNSUBSCRIBE and more, see
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.