[R] Read from data frame, and not from global environment

Prof Brian Ripley ripley at stats.ox.ac.uk
Tue Aug 2 13:32:35 CEST 2005


I don't think that is the best way to do what I guess you intended. Try 
something like

test <- function(formula,  data , weights)
{
     Call <- match.call()
     Call[[1]] <- as.name("glm")
     Call$family <- quote(poisson)
     glm1 <- eval.parent(Call)
     ....
}

which is probably giving the scoping that you want.

You could do what you ask for at 1) by something like

     wname <- deparse(substitute(w))
     w <- if(wname %in% names(data)) data[[wname]] else get(wname, .GlobalEnv)

and for 2) by replacing .GlobalEnv by an expression constructed by calls 
to environment() (I don't know exactly what you intended here).

On Tue, 2 Aug 2005, Jochen Einbeck wrote:

> Dear members,
>
> assume given  a function of type
>
> test<-function(formula,  data , w){
>  ......
>  glm1<-glm(formula,  family=poisson, data=data, weights=w)
>  ......
> }
>
> and a simple example data frame as
>
> test.frame<-data.frame(x=1:10,y=(1:10)*2,a=(1:10)^3).
>
> Let us now execute
>
> test(y ~ x, test.frame, a )
>
> My question is: What do I have to insert at the first occurance of .....
> in the test function to ensure that
>
> 1) 'a'  is read from the data frame (and is only read from the global
> environment if  and only if  'a' is not found in the data frame)
> 2) glm finds w in in the local environment of the function 'test'

That contradicts 1)!

> The question is obviously related to  Fernando's problem with
> 'Defining a "local" function'  some months ago, though the discussion
> there does not solve the questions above.

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595




More information about the R-help mailing list