I would like to calculate all combinations of all sizes.
With m=1, works as expected:
> combn(4, 1)
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
I get an appropriate error message here:
> combn(4, 1:4)
Error: length(m) == 1L is not TRUE
Try to Vectorize() it:
> combnV <- Vectorize(combn)
> combnV(4, 1:4)
Error in match.fun(FUN) : argument "FUN" is missing, with no default
My best guess is that combn's FUN=NULL somehow interferes with Vectorize. Maybe combn should be changed to check using missing(FUN) instead of is.null(FUN). Maybe just update ?Vectorize if this is a known limitation.
Here is the traceback if that helps, it shows FUN has disappeared from the mapply call.
3: mapply(x = 4, m = 1:4, MoreArgs = list(), SIMPLIFY = TRUE, USE.NAMES = TRUE)
2: do.call("mapply", c(FUN = FUN, args[dovec], MoreArgs = list(args[!dovec]),
SIMPLIFY = SIMPLIFY, USE.NAMES = USE.NAMES))
1: combnV(4, 1:4)
I am submitting this because ?bug.report says:
> If a command you are familiar with causes an R error message in a
> case where its usual definition ought to be reasonable, it is
> probably a bug.
Here is my session info:
R Under development (unstable) (2015-10-09 r69501)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: openSUSE 13.2 (Harlequin) (x86_64)
 LC_CTYPE=en_US.utf8 LC_NUMERIC=C
 LC_TIME=en_US.utf8 LC_COLLATE=en_US.utf8
 LC_MONETARY=en_US.utf8 LC_MESSAGES=en_US.utf8
 LC_PAPER=en_US.utf8 LC_NAME=C
 LC_ADDRESS=C LC_TELEPHONE=C
 LC_MEASUREMENT=en_US.utf8 LC_IDENTIFICATION=C
attached base packages:
 stats graphics grDevices utils datasets methods base
Thanks for looking in to this.
There's an inadvertent variable capture of FUN in the function generated by Vectorize. AFAICS it will break on every function that has an argument named FUN.
For the case at hand, you can work around it with
or just sidestep the whole thing with
sapply(1:4, combn, x=4)
This is now "fixed", by documenting the limitation and checking for it, in R-devel and R-patched.