# Re: [R] question on function arguments

From: Duncan Murdoch <murdoch_at_stats.uwo.ca>
Date: Tue, 19 Feb 2008 06:48:06 -0500

On 18/02/2008 4:53 AM, baptiste Auguié wrote:
> Hi,
>
> I have two small issues with my R code, no big deal but curiosity
> really. Here is a sample code,
>
>

```>> x <- rnorm(1:10)
>>
>> foo <- function(a = 1, b = list(x = c(1:10), y = c(1:10))){
>>
>> 	for (ii in seq(along=b\$y)){
>>
>> 		print(x[ii] + b\$x[ii])
>> 	}
>>
>>
>> }
>>
>> foo() # default OK
>>
>> foo(b=list(x=1, y=c(1:10))) # only the first term works
>>
>> foo(b\$y = 1:5) # error
>>
```

>
> In the last call, i wish to use all default arguments but b\$y (that
> is, using the default a and b\$x). Is this possible?

No, arguments are a simple list where you use the defaults or you don't.   You can't treat them as a hierarchical structure.
>
> The second call is more related to indices: i would like my argument b
> \$x to be either a vector (default), or a scalar. In the latter, the
> loop b\$x[ii] breaks when i would like it to recycle the single value.
> I can check the length of b\$x with a "if" statement, but it becomes
> intricate when several arguments have this option of being vector or
> scalar. Is there a way to use b\$x that would work in both cases?

The normal way to do this is to standardize the length of the object early in the function, e.g.

```  len <- max(length(b\$y), length(b\$x))
b\$y <- rep(b\$y, length=len)
b\$x <- rep(b\$x, length=len)

```

Another way (which is the way used internally in the C implementation) is to compute an index using the recycling rules, but that's probably not efficient in R code, e.g. you'd need

b\$x[ (ii - 1) %% length(b\$x) + 1 ]

in place of b\$x[ii] (and this solution is not general; it doesn't handle zero or negative indices properly).

Duncan Murdoch
>
>
> Many thanks,
>
> baptiste
>
> _____________________________
>
> Baptiste Auguié
>
> Physics Department
> University of Exeter
> Exeter, Devon,
> EX4 4QL, UK
>
> Phone: +44 1392 264187
>
> http://newton.ex.ac.uk/research/emag
> http://projects.ex.ac.uk/atto
>
> ______________________________________________
> R-help_at_r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> and provide commented, minimal, self-contained, reproducible code.

R-help_at_r-project.org 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. Received on Tue 19 Feb 2008 - 11:50:58 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Tue 19 Feb 2008 - 15:30:15 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.