Rainer M Krug
2014-Jan-20 13:12 UTC
[R] Grouping commands so that variablas are removed automatically - like functions
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi I would like to group commands, so that after a group of commands has been executed, the variables defined in that group are automatically deleted. My reasoning: I have a longer sript which is used to load data, do analysis and plot graphs, all part of a document (in org-mode / emacs). I have several datasets which are loaded, and each one is quite big. So after doing one part of the job (e.g. analysing the data and storing the results) I want to delete all variables used to free space and to avoid having these variables being used in the next block and still having the old (for this block invalid) values. I can't use rm(list=ls()) as I have some variables as "constants" which do not change over the whole document and also some functions defined. I could put each block in a function and then call the function and delete it afterwards, but this is as I see it abusing functions. I don't want to keep track manually of the variables. Therefore my question: Can I do something like: x <- 15 { #here begins the block a <- 1:100 b <- 4:400 } # here ends the block # here are and b not defined anymore # but x is still defined {} is great for grouping the commands, but the variables are not deleted afterwards. Am I missing a language feature in R? Rainer - -- Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology, UCT), Dipl. Phys. (Germany) Centre of Excellence for Invasion Biology Stellenbosch University South Africa Tel : +33 - (0)9 53 10 27 44 Cell: +33 - (0)6 85 62 59 98 Fax : +33 - (0)9 58 10 27 44 Fax (D): +49 - (0)3 21 21 25 22 44 email: Rainer at krugs.de Skype: RMkrug -----BEGIN PGP SIGNATURE----- Version: GnuPG/MacGPG2 v2.0.22 (Darwin) Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iQEcBAEBAgAGBQJS3SDSAAoJENvXNx4PUvmCEAwH/jBCuQLRpRcPu+PSrUBsck8v 49q3f0wAZqhyfjMQvRnLSECAfQN4GHI1WvXcuC9R8Z0eokL7gAqMnJSgWd61Un0F I+yClK1qbhpCwR8WV4nDXTuEW5rb5d8a1iHRPxXXSi/vdJZL3imWMsfvGTpgIhVw Dbi7+BSh52ZFEZPIyTm2+4qBfQA2ZaY3AEPTjBdB4iL603S+lpgmm1mAInFHFx5g 0CzzY3feTWreD+EATXMGofTDaoxR5vuLvIRvv+PA/Ehz/hVnQah2xriL4NR+pIHz 7WbqiReJ8H1ruAgtW6o8CmQRMArHmk0oBy1vYQvwB7SZ8/DOyKkArKBy8tGx/J0=dBo5 -----END PGP SIGNATURE-----
jim holtman
2014-Jan-20 13:27 UTC
[R] Grouping commands so that variablas are removed automatically - like functions
Check out the use of the 'local' function:> gc()used (Mb) gc trigger (Mb) max used (Mb) Ncells 199420 10.7 407500 21.8 350000 18.7 Vcells 308004 2.4 786432 6.0 786424 6.0> result <- local({+ a <- rnorm(1000000) # big objects + b <- rnorm(1000000) + mean(a + b) # return value + })> > result[1] 0.0001819203> gc()used (Mb) gc trigger (Mb) max used (Mb) Ncells 199666 10.7 407500 21.8 350000 18.7 Vcells 308780 2.4 2975200 22.7 3710863 28.4>Jim Holtman Data Munger Guru What is the problem that you are trying to solve? Tell me what you want to do, not how you want to do it. On Mon, Jan 20, 2014 at 8:12 AM, Rainer M Krug <Rainer at krugs.de> wrote:> -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Hi > > I would like to group commands, so that after a group of commands has > been executed, the variables defined in that group are automatically > deleted. > > My reasoning: I have a longer sript which is used to load data, do > analysis and plot graphs, all part of a document (in org-mode / > emacs). > > I have several datasets which are loaded, and each one is quite > big. So after doing one part of the job (e.g. analysing the data and > storing the results) I want to delete all variables used to free space > and to avoid having these variables being used in the next block and > still having the old (for this block invalid) values. > > I can't use rm(list=ls()) as I have some variables as "constants" > which do not change over the whole document and also some functions > defined. > > I could put each block in a function and then call the function and > delete it afterwards, but this is as I see it abusing functions. > > I don't want to keep track manually of the variables. > > Therefore my question: > > Can I do something like: > > x <- 15 > > { #here begins the block > a <- 1:100 > b <- 4:400 > } # here ends the block > > # here are and b not defined anymore > # but x is still defined > > {} is great for grouping the commands, but the variables are not > deleted afterwards. > > Am I missing a language feature in R? > > Rainer > > - -- > Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation > Biology, UCT), Dipl. Phys. (Germany) > > Centre of Excellence for Invasion Biology > Stellenbosch University > South Africa > > Tel : +33 - (0)9 53 10 27 44 > Cell: +33 - (0)6 85 62 59 98 > Fax : +33 - (0)9 58 10 27 44 > > Fax (D): +49 - (0)3 21 21 25 22 44 > > email: Rainer at krugs.de > > Skype: RMkrug > -----BEGIN PGP SIGNATURE----- > Version: GnuPG/MacGPG2 v2.0.22 (Darwin) > Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ > > iQEcBAEBAgAGBQJS3SDSAAoJENvXNx4PUvmCEAwH/jBCuQLRpRcPu+PSrUBsck8v > 49q3f0wAZqhyfjMQvRnLSECAfQN4GHI1WvXcuC9R8Z0eokL7gAqMnJSgWd61Un0F > I+yClK1qbhpCwR8WV4nDXTuEW5rb5d8a1iHRPxXXSi/vdJZL3imWMsfvGTpgIhVw > Dbi7+BSh52ZFEZPIyTm2+4qBfQA2ZaY3AEPTjBdB4iL603S+lpgmm1mAInFHFx5g > 0CzzY3feTWreD+EATXMGofTDaoxR5vuLvIRvv+PA/Ehz/hVnQah2xriL4NR+pIHz > 7WbqiReJ8H1ruAgtW6o8CmQRMArHmk0oBy1vYQvwB7SZ8/DOyKkArKBy8tGx/J0> =dBo5 > -----END PGP SIGNATURE----- > > ______________________________________________ > 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.