[R] A question about R environment

Tong Wang wangtong at usc.edu
Tue Jan 9 09:55:41 CET 2007


Francois (sorry can't type the right letter) , thanks a million for the detailed response,  you have really cool functions there !

Philippe :  I will definitely follow your advice later,  but I got some time pressure from the current project, so have to go with the easy sol. now ,   thanks a lot. 

Happy new year every one!

cheers

tong

----- Original Message -----
From: Philippe Grosjean <phgrosjean at sciviews.org>
Date: Monday, January 8, 2007 10:09 pm
Subject: Re: [R] A question about R environment
To: François Pinard <pinard at iro.umontreal.ca>, Tong Wang <wangtong at usc.edu>, R help <r-help at stat.math.ethz.ch>

> Please, don't reinvent the wheel: putting functions in a dedicated 
> environment is one of the things done by R packages (together with 
> a 
> good documentation of the function, and making them easily 
> installable 
> on any R implementation). So, this is probably the time for you to 
> read 
> the "Writing R extensions" manual, and to start implementing your 
> own R 
> package!
> Best,
> 
> Philippe Grosjean
> 
> François Pinard wrote:
> > [Tong Wang]
> > 
> >> I created environment "mytoolbox" by : mytoolbox <- 
> >> new.env(parent=baseenv()).  Is there anyway I put it in the 
> search 
> >> path?  In a project, I often write some small functions, and 
> load them 
> >> into my workspace directly, so when I list the objects with 
> ls(), it 
> >> looks pretty messy.  So I am wondering if it is possible to 
> creat an 
> >> environment, and put these tools into this environment.  For 
> example, 
> >> I have functions fun1(), fun2() ... and creat an environment 
> mytoolbox 
> >> which contains all these functions.  And it should be somewhere 
> in the 
> >> search path:  ".GlobalEnv" "mytoolbox" "package:methods".
> > 
> > Here is a trick, shown as a fairly simplified copy of my 
> ~/.Rprofile.  
> > It allows for a few simple functions always available, yet 
> without 
> > having to create a package, and leaving ls() and any later .RData 
> file 
> > unencumbered.
> > 
> > The idea is to use local() to prevent any unwanted clutter to 
> leak out 
> > (my real ~/.Rprofile holds more than shown below and use 
> temporary 
> > variables), to initialise a list meant to hold a bunch of 
> functions or 
> > other R things, and to save that list on the search path.
> > 
> > This example also demonstrate a few useful functions for when I 
> read the 
> > R mailing list.  I often need to transfer part of emails containing
> > code excerpts within the window where R executes, while removing 
> > quotation marks, white lines and other noise.  I merely highlight-
> select 
> > part of the message with the mouse, and then, within R, do things 
> like:> 
> >    xs()   source the highlighted region
> >    xd()   read in a data.frame
> >    xm()   read in a matrix
> >    xe()   evaluate and print an expression
> >    xv()   read a list of values as a vector
> > 
> > The list above in decreasing order of usefulness (for me).  
> Except for 
> > xs(), which has no automatic printout, you may either let the 
> others 
> > print what they got, or assign their value to some variable.  
> Arguments 
> > are also possible, for example like this:
> > 
> >    xd(T)  read in a data.frame when the first line holds column 
> names> 
> > 
> > 
> > if (interactive()) {
> >     local({
> > 
> >         fp.etc <- list()
> > 
> >         fp.etc$xsel.vector <- function (...) {
> >             connexion <- textConnection(xselection())
> >             on.exit(close(connexion))
> >             scan(connexion, ...)
> >         }
> >         fp.etc$xsel.dataframe <- function (...) {
> >             connexion <- textConnection(xselection())
> >             on.exit(close(connexion))
> >             read.table(connexion, ...)
> >         }
> >         fp.etc$xsel.matrix <- function (...) {
> >             connexion <- textConnection(xselection())
> >             on.exit(close(connexion))
> >             data.matrix(read.table(connexion, ...))
> >         }
> >         fp.etc$xsel.eval <- function (...) {
> >             connexion <- textConnection(xselection())
> >             on.exit(close(connexion))
> >             eval(parse(connexion, ...))
> >         }
> >         fp.etc$xsel.source <- function (...) {
> >             connexion <- textConnection(xselection())
> >             on.exit(close(connexion))
> >             source(connexion, ...)
> >         }
> > 
> >         fp.etc$xselection <- function ()
> >         {
> >             lignes <- suppressWarnings(readLines('clipboard'))
> >             lignes <- lignes[lignes != '']
> >             stopifnot(length(lignes) != 0)
> >             marge <- substr(lignes, 1, 1)
> >             while (all(marge %in% c('>', '+', ':', '|'))
> >                   || all(marge == ' ')) {
> >                 lignes <- substring(lignes, 2)
> >                 marge <- substr(lignes, 1, 1)
> >             }
> >             lignes
> >         }
> > 
> >         fp.etc$xv <- fp.etc$xsel.vector
> >         fp.etc$xd <- fp.etc$xsel.dataframe
> >         fp.etc$xm <- fp.etc$xsel.matrix
> >         fp.etc$xe <- fp.etc$xsel.eval
> >         fp.etc$xs <- fp.etc$xsel.source
> > 
> >         attach(fp.etc, warn=FALSE)
> > 
> >     })
> > }
> > 
> > # vim: ft=r
> > 
> > 
>



More information about the R-help mailing list