[R] Testing for arguments in a function

David Winsemius dwinsemius at comcast.net
Tue Sep 27 02:49:04 CEST 2011


On Sep 26, 2011, at 8:04 PM, Duncan Murdoch wrote:

> On 11-09-26 5:15 PM, David Winsemius wrote:
>>
>> On Sep 26, 2011, at 4:56 PM, Duncan Murdoch wrote:
>>
>>> On 26/09/2011 3:39 PM, Gene Leynes wrote:
>>>> I don't understand how this function can subset by i when i is
>>>> missing....
>>>>
>>>> ## My function:
>>>> myfun = function(vec, i){
>>>>     ret = vec[i]
>>>>     ret
>>>> }
>>>>
>>>> ## My data:
>>>> i = 10
>>>> vec = 1:100
>>>>
>>>> ## Expected input and behavior:
>>>> myfun(vec, i)
>>>>
>>>> ## Missing an argument, but error is not caught!
>>>> ## How is subsetting even possible here???
>>>> myfun(vec)
>>>
>>> Subsetting allows missing arguments.  What you have is equivalent to
>>> evaluating
>>>
>>> vec[]
>>>
>>> which is legal.
>>
>> But I don't think "vec[]" is what he is seeing. At least it's not  
>> what
>> I see. I see 10 coming back. I assumed it was simply because "i" was
>> not found inside the function so its calling environment was examined
>> so that vec[10] was returned.
>>
>
> In which R version?

Sorry for the confusion. Even before my wine with dinner I was under  
the impression that I had entered

myfun(vec) # and gotten 10.

When I  look back, I see  I was mistaken. So now I standing alongside   
Leynes. I thought R would find "i" and he thought it wouldn't. You are  
saying R "doesn't care" andthat should continue on it merry way. Why  
doesn't R look for "i"?

-- 
David.


>  In 2.13.1 patched (from a few weeks ago) I get this:
>
> > ## Expected input and behavior:
> > myfun(vec, i)
> [1] 10
> >
> > ## Missing an argument, but error is not caught!
> > ## How is subsetting even possible here???
> > myfun(vec)
>  [1]   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15
> [16]  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30
> [31]  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45
> [46]  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60
> [61]  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75
> [76]  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90
> [91]  91  92  93  94  95  96  97  98  99 100
> >
>
> The second set of output is the same as vec[].
>
> Duncan Murdoch

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list