Peter Dalgaard wrote: > Titus von der Malsburg wrote: >> Hi list! I have a data frame called fix and a list of index vectors >> called rois: >> >> > head(rois, 3) >> [[1]] >> [1] 2 1 >> >> [[2]] >> [1] 3 >> >> [[3]] >> [1] 6 7 28 26 27 24 25 >> >> The part that's causing the issue is the following line: >> >> lapply(rois, function(roi) fix$x[roi] <- 100) >> >> So for every index vector I'd like to set the respective entries in the >> data frame (fix) to 100. >> >> I expected the data frame would be changed after lapply but instead it >> remains unchanged. I understand that when I pass an argument into a >> function it gets passed as a value and not as a reference. But here fix >> is not an argument but captured in the closure. Do my questions are: >> What's going on here and what is the idiomatic way of achieving my goal? >> > > It's a local variable in the function. Not in principle different from > > function(roi) { fix <- fix ; ... } > > You could use superassignment (<<-), but a simpler idiom is > > for (roi in rois) fix$x[roi] <- 100 >
interesting. i'm not sure if this is something one should consider obvious, though it does make sense. actually, it seems that r gets caught by surprise on such sort of semantics: d = data,frame(x=1:10^8) (function() d$x[1] = 0)() prints 'Error: cannot allocate vector of size 762.9 Mb' and stops responding with 100% cpu (sometimes even 101, as reported by top, hehe) occupied by r. platform i686-pc-linux-gnu arch i686 os linux-gnu system i686, linux-gnu status major 2 minor 8.0 year 2008 month 10 day 20 svn rev 46754 language R version.string R version 2.8.0 (2008-10-20) vQ ______________________________________________ R-help@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.