[R] saving a 'get' object in R

Jeff Newmiller jdnewmil at dcn.davis.CA.us
Wed Jun 25 17:23:02 CEST 2014


Seems to me you are creating your own troubles in your "requirements". If the analysis is the same from case to case, it makes more sense to use a single set of object names within the analysis and change only the names of the input and output files.
---------------------------------------------------------------------------
Jeff Newmiller                        The     .....       .....  Go Live...
DCN:<jdnewmil at dcn.davis.ca.us>        Basics: ##.#.       ##.#.  Live Go...
                                      Live:   OO#.. Dead: OO#..  Playing
Research Engineer (Solar/Batteries            O.O#.       #.O#.  with
/Software/Embedded Controllers)               .OO#.       .OO#.  rocks...1k
--------------------------------------------------------------------------- 
Sent from my phone. Please excuse my brevity.

On June 25, 2014 7:53:33 AM PDT, David Stevens <david.stevens at usu.edu> wrote:
>Greg - I appreciate your taking the time to explain. This is very 
>helpful. My case was a bit unusual as I'm helping a colleague with code
>
>to use on a regular but individual basis. I want them to name a data
>set 
>once at the top of the script and have that name propagate through 
>several objects that end up being saved at the end with file names tied
>
>to the data set name. Then tomorrow, they'll do the same thing on a 
>different data set so each session would be pretty simple, with only
>2-3 
>named objects at the end, though the data sets are big and cumbersome.
>
>I'll dig into this more and apologize to those who thought this problem
>
>was too trivial for the r-help forum.
>
>David
>
>On 6/24/2014 4:00 PM, Greg Snow wrote:
>> 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.
>>
>>
>
>-- 
>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.



More information about the R-help mailing list