I generally agree with you that it's more of an annoyance than anything, but here's a simple example: Think about how you would do bootstrap for something like correlation between two vectors. All of these calls will fail to do what we want: ``` x <- rnorm(30) y <- x + rnorm(30, 0, 0.1) boot(x, cor, R=1000) boot(x, y, cor, R=1000) boot(cbind(x, y), cor, R=1000) ``` Instead, we need something like: ``` my_cor <- function(x, i){ x <- x[i,] cor(x[,1], x[,2]) } boot(cbind(x, y), my_cor, R=1000) ``` While there are other solutions, like coercing `x` to be a matrix and internally setting `x_boot = x[i,]`, this may not be ideal in all cases. What if my data is structured so that I want to take samples across columns rather than rows? Or what if my data is organized as a list? This extra requirement gives us flexibility in the end (but is just annoying 99% of the time).