Hi all, I created environment "mytoolbox" by : mytoolbox <- new.env(parent=baseenv()) Is there anyway I put it in the search path ? If you need some background : 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" ........
Try this:> e <- new.env() > e$f <- function(x)x > attach(e) > search()[1] ".GlobalEnv" "e" "package:stats" [4] "package:graphics" "package:grDevices" "package:utils" [7] "package:datasets" "package:methods" "Autoloads" [10] "package:base"> ffunction(x)x On 1/8/07, Tong Wang <wangtong at usc.edu> wrote:> Hi all, > > I created environment "mytoolbox" by : mytoolbox <- new.env(parent=baseenv()) > Is there anyway I put it in the search path ? > > If you need some background : > 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" ........ > > ______________________________________________ > R-help at stat.math.ethz.ch 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. >
[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 -- Fran?ois Pinard http://pinard.progiciels-bpi.ca
sourceTo() in R.utils will allow you to source() a file into an environment. /Henrik On 1/9/07, Gabor Grothendieck <ggrothendieck at gmail.com> wrote:> Try this: > > > e <- new.env() > > e$f <- function(x)x > > attach(e) > > search() > [1] ".GlobalEnv" "e" "package:stats" > [4] "package:graphics" "package:grDevices" "package:utils" > [7] "package:datasets" "package:methods" "Autoloads" > [10] "package:base" > > f > function(x)x > > On 1/8/07, Tong Wang <wangtong at usc.edu> wrote: > > Hi all, > > > > I created environment "mytoolbox" by : mytoolbox <- new.env(parent=baseenv()) > > Is there anyway I put it in the search path ? > > > > If you need some background : > > 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" ........ > > > > ______________________________________________ > > R-help at stat.math.ethz.ch 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. > > > > ______________________________________________ > R-help at stat.math.ethz.ch 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. >
Hi, Thanks a lot for your response, but it is strange that when I do attach() , I got the follow error: Error in attach(e) : attach only works for lists and data frames Any suggestions on this? tong ----- Original Message ----- From: Henrik Bengtsson <hb at stat.berkeley.edu> Date: Monday, January 8, 2007 10:40 pm Subject: Re: [R] A question about R environment To: Gabor Grothendieck <ggrothendieck at gmail.com> Cc: Tong Wang <wangtong at usc.edu>, R help <r-help at stat.math.ethz.ch>> sourceTo() in R.utils will allow you to source() a file into an > environment. > /Henrik > > On 1/9/07, Gabor Grothendieck <ggrothendieck at gmail.com> wrote: > > Try this: > > > > > e <- new.env() > > > e$f <- function(x)x > > > attach(e) > > > search() > > [1] ".GlobalEnv" "e" "package:stats" > > [4] "package:graphics" "package:grDevices" "package:utils" > > [7] "package:datasets" "package:methods" "Autoloads" > > [10] "package:base" > > > f > > function(x)x > > > > On 1/8/07, Tong Wang <wangtong at usc.edu> wrote: > > > Hi all, > > > > > > I created environment "mytoolbox" by : mytoolbox <- > new.env(parent=baseenv())> > Is there anyway I put it in the search > path ? > > > > > > If you need some background : > > > 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" ........ > > > > > > ______________________________________________ > > > R-help at stat.math.ethz.ch 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. > > > > > > > ______________________________________________ > > R-help at stat.math.ethz.ch 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. > > >