Quantcast

Optional data argument for a function

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Optional data argument for a function

Viechtbauer Wolfgang (STAT)
Dear All,

I am working on a function that has an optional data argument, just like lm(). If the user sets the data argument equal to some dataframe, then the function should look inside the dataframe for the variables given to other arguments, otherwise the variables should be accessible from what I believe is called the parent frame from which the function was called. I looked at the source code for lm() (and similar functions) and the documentation of ?eval, but I just can't quite figure out how to make this work.

So, for a simple example, suppose I want to do this with the following function:

dosomething <- function(x, data) {
        temp <- x^2 + 5
        return(temp)
}

How does the function need to be changed, so that dosomething(somevariable, data=somedataframe) will find somevariable within the dataframe somedataframe and if dosomething(somevariable) is called, the function should find somevariable in the parent frame (or anywhere else in the search path)?

Thanks for any help!

--
Wolfgang Viechtbauer
 Department of Methodology and Statistics
 University of Maastricht, The Netherlands
 http://www.wvbauer.com/ 

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Optional data argument for a function

Henrique Dallazuanna
One option is:

dosomething <- function(x, data, env=parent.frame()) {
       if(!missing(data)) x <- data[,deparse(substitute(x))]
       temp <- x^2 + 5
       return(temp)
}

On 29/02/2008, Viechtbauer Wolfgang (STAT)
<[hidden email]> wrote:

> Dear All,
>
>  I am working on a function that has an optional data argument, just like lm(). If the user sets the data argument equal to some dataframe, then the function should look inside the dataframe for the variables given to other arguments, otherwise the variables should be accessible from what I believe is called the parent frame from which the function was called. I looked at the source code for lm() (and similar functions) and the documentation of ?eval, but I just can't quite figure out how to make this work.
>
>  So, for a simple example, suppose I want to do this with the following function:
>
>  dosomething <- function(x, data) {
>         temp <- x^2 + 5
>         return(temp)
>  }
>
>  How does the function need to be changed, so that dosomething(somevariable, data=somedataframe) will find somevariable within the dataframe somedataframe and if dosomething(somevariable) is called, the function should find somevariable in the parent frame (or anywhere else in the search path)?
>
>  Thanks for any help!
>
>  --
>  Wolfgang Viechtbauer
>   Department of Methodology and Statistics
>   University of Maastricht, The Netherlands
>   http://www.wvbauer.com/
>
>  ______________________________________________
>  [hidden email] mailing list
>  https://stat.ethz.ch/mailman/listinfo/r-help
>  PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>  and provide commented, minimal, self-contained, reproducible code.
>


--
Henrique Dallazuanna
Curitiba-Paraná-Brasil
25° 25' 40" S 49° 16' 22" O

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Loading...