[R] A question about R environment

Philippe Grosjean phgrosjean at sciviews.org
Tue Jan 9 07:09:03 CET 2007


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