[R] programming questions
ivo welch
ivo.welch at gmail.com
Wed Nov 3 21:04:58 CET 2010
thanks, eric---I need a little more clarification. *yes, I write
functions and then forget them. so I want them to be self-sufficient.
I want to write functions that check all their arguments for
validity.) For example,
my.fn <- function( mylist ) {
stop.if.not( is.defined(mylist) ) ## ok, superfluous
stop.if.not( is.defined(mylist$dataframe.in.mylist ))
stop.if.not( is.defined(mylist$dataframe.in.mylist$a.component.I.need) )
### other checks, such as whether the component I need is long
enough, positive, etc.
### could be various other operations
mylist$dataframe.in.mylist$a.component.I.need
}
so
my.fn( asd ) ## R gives me an error, asd is not in existence
my.fn( NULL ) ## second error: the list component
'dataframe.in.mylist' I need is not there
my.fn( data.frame( some.other.component=1:4 ) ) ## second error;
the list component 'dataframe.in.mylist' I need is not there
my.fn( list( hello=1, silly=data.frame( x=1:4 ) ) ) ## second error:
dataframe.in.mylist does not exist
my.fn( list( hello=2, dataframe.in.mylist= data.frame(
a.component.I.need=1:4 )) ## ok
exists() works on a "stringified" variable name. how do I stringify in R?
PS: btw, is it possible to weave documentation into my user function,
so that I can type "?is.defined" and I get a doc page that I have
written? Ala perl pod. I think I asked this before, and the answer
was no.
/iaw
----
Ivo Welch (ivo.welch at brown.edu, ivo.welch at gmail.com)
CV Starr Professor of Economics (Finance), Brown University
http://www.ivo-welch.info/
On Wed, Nov 3, 2010 at 3:40 PM, Erik Iverson <eriki at ccbr.umn.edu> wrote:
>
>> alas, should R not come with an is.defined() function?
>
> ?exists
>
> a variable may
>>
>> never have been created, and this is different from a variable
>> existing but holding a NULL. this can be the case in the global
>> environment or in a data frame.
>>
>> > is.null(never.before.seen)
>> Error: objected 'never.before.seen' not found
>> > is.defined(never.before.seen) ## I need this, because I do not
>> want an error:
>> [1] FALSE
>
> exists("never.before.seen") #notice the quotes
> [1] FALSE
>
>>
>> your acs function doesn't really do what I want, either, because {
>> d=data.frame( x=1:4); exists(acs(d$x)) } tells me FALSE . I really
>> need
>>
>> > d <- data.frame( x=1:5, y=1:5 )
>> > is.defined(d$x)
>> TRUE
>
> with(d, exists("x"))
>
>> > is.defined(d$z)
>> FALSE
>
> with(d, exists("z"))
>
>> > is.defined(never.before.seen)
>> FALSE
>
> exists("never.before.seen")
>
>> > is.defined(never.before.seen$anything) ## if a list does not
>> exist, anything in it does not exist either
>> FALSE
>
> This one I'm a bit confused about. If you're
> programming a function, then the user either:
>
> 1) passes in an object, which is bound to a
> local variable, and therefore exists. You can
> do checks on that object to see that it conforms
> to any constraints you have set.
>
> 2) does not pass in the object, in which case
> you can test for that with ?missing.
>
> Is writing your own functions for others to
> use what you're doing?
>
> --Erik
>
>
More information about the R-help
mailing list