Calculates the number of positional arguments used in a call.

nposargs(x, a = FALSE)

## Arguments

x |
a call object, usually obtained from `sys.call()` . |

a |
if `a[1]` is `TRUE` make a correction to distinguish
`x[]` from `x[i]` , see details. |

## Details

`nposargs`

is mainly for use in the body of function definitions,
paricularly for functions or methods that wish to mimic the behaviour
of `"["`

.

`nposargs`

gives the number of positional arguments used in a
call. It also takes into account empty arguments like those used in
expressions like `x[1, ]`

.

Optionally, it makes a particular correction that is peculiar
for "[" - if there are no named arguments in the call and the count
of the arguments is 2 and `a[1]=TRUE`

, it decreases the count by
one, i.e. returns 1. This is to distinguish between a `x[]`

and
`x[i]`

which both would give 2 otherwise. I have forgotten the details but,
roughly speaking, x[i] becomes "["(x,i) while x[] becomes "["(x,),
i.e. R puts the comma after x in any case.

## Value

the number of positional arguments in the call

## Note

I wrote this function (a long time ago) for use in methods for
`"["`

.

`a[1]`

above is typically obtained by a call `missing(i)`

somewhere at the beginning of the function. In my application I put
the results of several such calls in a vector, hence the check for
`a[1]`

rather than `a`

, For `"["`

, we may set
`a = c(missing(i), missing(j), missing(k))`

.

## Examples

f <- function(x,y,z,...){
call <- sys.call()
nposargs(call)
}
f(a,b,c) # 3

#> [1] 3

f(a, , ) # 3

#> [1] 3

f(a, ) # 2

#> [1] 2

f(a) # 1

#> [1] 1

f(, ) # 2

#> [1] 2

f(, a, ) # 3

#> [1] 3

f() # 0

#> [1] 0