From istazahn at gmail.com  Sat Jun 21 16:24:19 2014
From: istazahn at gmail.com (Ista Zahn)
Date: Sat, 21 Jun 2014 10:24:19 -0400
Subject: [Rd] dget() much slower in recent R versions
In-Reply-To: <53A53A90.4070106@stats.ox.ac.uk>
References: <CA+vqiLFbYLec-6Afcee2fGq0R=_8=VyZAfq1nMHMgCd_ynAPhA@mail.gmail.com>
	<53A53A90.4070106@stats.ox.ac.uk>
Message-ID: <CA+vqiLFmY5q78xUpyZ-NYFMD_UPM+SGw2G6H_XUip-Xkp6B1ng@mail.gmail.com>

Makes sense, thanks for the explanation.

Best,
Ista

On Sat, Jun 21, 2014 at 3:56 AM, Prof Brian Ripley
<ripley at stats.ox.ac.uk> wrote:
> On 20/06/2014 15:37, Ista Zahn wrote:
>>
>> Hello,
>>
>> I've noticed that dget() is much slower in the current and devel R
>> versions than in previous versions. In 2.15 reading a 10000-row
>> data.frame takes less than half a second:
>>
>>> (which.r <- R.Version()$version.string)
>>
>> [1] "R version 2.15.2 (2012-10-26)"
>>>
>>> x <- data.frame(matrix(sample(letters, 100000, replace = TRUE), ncol =
>>> 10))
>>> dput(x, which.r)
>>> system.time(y <- dget(which.r))
>>
>>     user  system elapsed
>>    0.546   0.033   0.586
>>
>> While in 3.1.0 and r-devel it takes around 7 seconds.
>>
>>> (which.r <- R.Version()$version.string)
>>
>> [1] "R version 3.1.0 (2014-04-10)"
>>>
>>> x <- data.frame(matrix(sample(letters, 100000, replace = TRUE), ncol =
>>> 10))
>>> dput(x, which.r)
>>> system.time(y <- dget(which.r))
>>
>>     user  system elapsed
>>    6.920   0.060   7.074
>>
>>> (which.r <- R.Version()$version.string)
>>
>> [1] "R Under development (unstable) (2014-06-19 r65979)"
>>>
>>> x <- data.frame(matrix(sample(letters, 100000, replace = TRUE), ncol =
>>> 10))
>>> dput(x, which.r)
>>> system.time(y <- dget(which.r))
>>
>>     user  system elapsed
>>    6.886   0.047   6.943
>>>
>>>
>>
>> I know dput/dget is probably not the right tool for this job:
>> nevertheless the slowdown in quite dramatic so I thought it was worth
>> calling attention to.
>
>
> This is completely the wrong way to do this. See ?dump.
>
> dget() basically calls eval(parse()).  parse() is much slower in R >= 3.0
> mainly because it keeps more information.  Using keep.source=FALSE here
> speeds things up a lot.
>
>
>> system.time(y <- dget(which.r))
>    user  system elapsed
>   3.233   0.012   3.248
>> options(keep.source=FALSE)
>
>> system.time(y <- dget(which.r))
>    user  system elapsed
>   0.090   0.001   0.092
>
>
> --
> Brian D. Ripley,                  ripley at stats.ox.ac.uk
> Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
> University of Oxford,             Tel:  +44 1865 272861 (self)
> 1 South Parks Road,                     +44 1865 272866 (PA)
> Oxford OX1 3TG, UK                Fax:  +44 1865 272595



[Rd] dget() much slower in recent R versions
Ista Zahn