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

From: Jochen Einbeck <jochen.einbeck_at_nuigalway.ie>
Date: Thu 04 Aug 2005 - 00:33:14 EST

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.

>

>

R-help@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 Received on Thu Aug 04 00:38:22 2005

This archive was generated by hypermail 2.1.8 : Sun 23 Oct 2005 - 15:02:31 EST