Skip to contents

Calculates the number of positional arguments used in a call.

Usage

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

Author

Georgi N. Boshnakov

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