Right. A semi-short explanation is that R doesn't do full reference counting 
(*), hence copying happens when you modify an object that _at any previous 
point_ has been known by two or more names (incl. same name in different 
environments). 

In the present case, there has been local variable x inside foo(), and global 
variable x.

-pd

(*) ...yet. Luke Tierney has been working on this; I have temporarily forgotten 
how much of his work is included in released versions of R.

On 03 Mar 2017, at 00:46 , Bert Gunter <bgunter.4...@gmail.com> wrote:

> Your assumptions are wrong.
> 
> a full discussion and answer to your question can be found here:
> http://adv-r.had.co.nz/memory.html
> 
> This *is* complex and probably off topic for this list.
> 
> Cheers,
> Bert
> 
> 
> Bert Gunter
> 
> "The trouble with having an open mind is that people keep coming along
> and sticking things into it."
> -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
> 
> 
> On Thu, Mar 2, 2017 at 7:35 AM, Jiucang Hao <jiuc...@goraltrading.com> wrote:
>> Hi Everyone,
>> 
>> 
>> 
>> Some R function will make R copy the object AFTER the function call, like
>> nrow, while some others don't, like sum. For example the following code:
>> 
>> x = as.double(1:1e8)
>> 
>> system.time(x[1] <- 100)
>> 
>> y = sum(x)
>> 
>> system.time(x[1] <- 200)     ## Fast (takes 0s), after calling sum
>> 
>> foo = function(x) {
>> 
>>    return(sum(x))
>> 
>> }
>> 
>> y = foo(x)
>> 
>> system.time(x[1] <- 300)     ## Slow (takes 0.35s), after calling foo
>> 
>> Calling foo is NOT slow, because x isn't copied. However, changing x again
>> is very slow, as x is copied. My guess is that calling foo will leave a
>> reference to x, so when changing it after, R makes another copy.
>> 
>> Any one knows why R does this? Even when the function doesn't change x at
>> all? Thanks.
>> 
>> 
>> 
>> 
>> 
>> Regards,
>> 
>> JiuCang Hao
>> 
>> 
>>        [[alternative HTML version deleted]]
>> 
>> ______________________________________________
>> 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.
> 
> ______________________________________________
> 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.

-- 
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Office: A 4.23
Email: pd....@cbs.dk  Priv: pda...@gmail.com

______________________________________________
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.

Reply via email to