| EDIT: i gotta admit, you sound like you've got more experience with teaching R than me. so perhaps my opinions here are a bit strong for what they're based on, i.e. tutoring a couple of non-programmer friends and my own learning process. still... > My experience is that this weird evaluation order stuff is only confusing for students with a lot of programming experience who already expect nice lexical scope fair point, but for the most part, R itself does use pretty standard lexical scoping unless you opt into "non-standard evaluation" by using `substitute`[1]. so building a mental model of lexical scoping and "standard evaluation" is a pretty important thing to learn. after that, the student can see how quoting can "break" it, or at least be able to understand a sentence like "you know how evaluation usually works? this is different! but don't worry about it too much for now". and i think dropping someone new straight into tidyverse stuff gets in the way of this process. > and even then, base R isn’t any simpler: the confusing evaluation order is built into R itself at the deepest level. i mean, quoting can't really work without being deeply integrated into the language, can it? besides: - AFAICT base R data manipulation functions don't use it a lot. [2] - for the most part, R's evaluation order can be ignored (at a certain learning stage) because it's not observable if you stick to pure stuff, which you probably should anyway. --- [1] http://adv-r.had.co.nz/Computing-on-the-language.html#captur... [2] admittedly, stuff with `formula`s is similarly wacky, and if you're doing stats you're going to run into that sooner or later... |
But try out this bit of base R:
> hello = function(cats, dogs) { return(cats) }
> hello(100, honk) # where honk has never been defined
> hello(100, print("hello!"))
> hello(100)