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

Jochen Einbeck jochen.einbeck at nuigalway.ie
Wed Aug 3 16:33:14 CEST 2005


Thanks. It is now working as I wanted, if I use (simplified)

test<-function(formula, data, w){
  wname <- deparse(substitute(w))
  w <- if(wname %in% names(data)) data[[wname]] else get(wname, .GlobalEnv)
  data$w<-w
  glm1<-glm(formula=formula,data=data, weights=w)
  .....
}


What I was looking for in  2) was a more elegant way  (than setting 
data$w<-w)  to make  w  available to the glm function.



Prof Brian Ripley wrote:

> 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.
> 
>




More information about the R-help mailing list