[R] saving a 'get' object in R

Greg Snow 538280 at gmail.com
Wed Jun 25 00:00:35 CEST 2014


The main reason to avoid assign/get is that there are better ways.
You can use a list or environment more directly without using
assign/get.  Also the main reason to use assign/get is to work with
global variables which are frowned on in general programming (and
prone to hard to find bugs).

Consider the following code snippet:

x <- 1:10
functionThatUsesAssign(x)

what is the value of x after running this code?  If you use global
variables then the answer is "I don't know", and if x was something
that took several hours to compute and I just accidentally overwrote
it, then I am probably not happy.

Using assign often leads to the temptation to try code like:

assign( "x[5]", 25 )

which does something (no warnings, no errors) but generally not what
was being attempted.

Another common (mis)use of assign/get is to create a sequence of
variables like "data01", "data02", "data03", ...  and then do the same
thing for each of the data objects.  This is much better done by
putting all the objects into a single list, then you can easily
iterate over the list using lapply/sapply or still access the
individual pieces.  Then when it comes time to save these objects, you
only need to save the list, not all the individual objects, same for
deleting, copying, moving, etc.  And you don't have a bunch of
different objects cluttering your workspace, just a single list.

On Tue, Jun 24, 2014 at 2:57 PM, David Stevens <david.stevens at usu.edu> wrote:
> Thanks to all for the replies. I tried all three and they work great. I was
> misinterpreting the list = parameter in save(...) and I get your point about
> overwriting existing objects.  I've heard about not using assign/get before.
> Can anyone point me to why and what alternatives there are?
>
> Regards
>
> David
>
>
> On 6/24/2014 2:50 PM, Henrik Bengtsson wrote:
>>
>> I recommend to use saveRDS()/readRDS() instead.  More convenient and
>> avoids the risk that load() has of overwriting existing variables with
>> the same name.
>>
>> /Henrik
>>
>> On Tue, Jun 24, 2014 at 1:45 PM, Greg Snow <538280 at gmail.com> wrote:
>>>
>>> I think that you are looking for the `list` argument in `save`.
>>>
>>> save( list=foo, file=paste0(foo, '.Rdata') )
>>>
>>> In general it is best to avoid using the assign function (and get when
>>> possible).  Usually there are better alternatives.
>>>
>>> On Tue, Jun 24, 2014 at 2:35 PM, David Stevens <david.stevens at usu.edu>
>>> wrote:
>>>>
>>>> R community,
>>>>
>>>> Apologies if this has been answered. The concept I'm looking for is to
>>>> save() an object retrieved using get() for an object
>>>> that resulted from using assign. Something like
>>>>
>>>> save(get(foo),file=paste(foo,'rData',sep=''))
>>>>
>>>> where assign(foo,obj) creates an object named foo with the contents of
>>>> obj
>>>> assigned. For example, if
>>>>
>>>> x <- data.frame(v1=c(1,2,3,4),v2=c('1','2','3','4'))
>>>> foo = 'my.x'
>>>> assign(foo,x)
>>>> # (... then modify foo as needed)
>>>> save(get(foo),file=paste(foo,'.rData',sep=''))
>>>>
>>>> # though this generates " in save(get(foo), file = paste(foo, ".rData",
>>>> sep
>>>> = "")) :
>>>> object ‘get(foo)’ not found", whereas
>>>>
>>>> get(foo)
>>>>
>>>> at the command prompt yields the contents of my.x
>>>>
>>>> There's a concept I'm missing here. Can anyone help?
>>>>
>>>> Regards
>>>>
>>>> David Stevens
>>>>
>>>> --
>>>> David K Stevens, P.E., Ph.D.
>>>> Professor and Head, Environmental Engineering
>>>> Civil and Environmental Engineering
>>>> Utah Water Research Laboratory
>>>> 8200 Old Main Hill
>>>> Logan, UT  84322-8200
>>>> 435 797 3229 - voice
>>>> 435 797 1363 - fax
>>>> david.stevens at usu.edu
>>>>
>>>> ______________________________________________
>>>> R-help at 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.
>>>
>>>
>>>
>>> --
>>> Gregory (Greg) L. Snow Ph.D.
>>> 538280 at gmail.com
>>>
>>> ______________________________________________
>>> R-help at 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.
>
>
> --
> David K Stevens, P.E., Ph.D.
> Professor and Head, Environmental Engineering
> Civil and Environmental Engineering
> Utah Water Research Laboratory
> 8200 Old Main Hill
> Logan, UT  84322-8200
> 435 797 3229 - voice
> 435 797 1363 - fax
> david.stevens at usu.edu
>
> ______________________________________________
> R-help at 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.



-- 
Gregory (Greg) L. Snow Ph.D.
538280 at gmail.com



More information about the R-help mailing list