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? thx ce -----Original Message----- From: "David Winsemius" [dwinsem...@comcast.net] Date: 05/09/2015 08:00 PM To: "ce" <zadi...@excite.com> CC: r-help@r-project.org 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 ______________________________________________ R-help@r-project.org 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.