[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