Currently the API is clean in that there are very few methods with many if statements in them. However, if someone were to run them in a loop this would become costly. Ideally there would be a way to call selectByFunc instead of call select and check if isFunc(params[0]).
In essence:
class DataFrame {
select(...params) {
// choose select* depending on value of params
// ...
}
selectByFunc(f) { ... }
selectByIdx(n, m) { ... }
}