Jochen Einbeck
2005-Aug-02 10:57 UTC
[R] Read from data frame, and not from global environment
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' 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. Cheers, Jochen Einbeck NUI Galway, Ireland
Prof Brian Ripley
2005-Aug-02 11:32 UTC
[R] Read from data frame, and not from global environment
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