Appendix E — What this grammar does not do
A tool’s marketing lists what it has. A manual you can trust also lists what it lacks, so here are both directions, measured against dplyr and pandas in August 2026. The first list will shrink as the vocabulary grows under its laws. The honest way to read it today is as the price of the small grammar the rest of this book sells.
E.1 The gaps, and their exits
Each row names the gap and the exit. The exit is always real. show_as renders your pipeline in the host tool, and you finish the last step there, in code you can read because you watched it being written.
| the gap | what to do today |
|---|---|
| Regular expressions | starts, ends, contains, replace_text, split_text cover the common cases; regex stays in the host |
Arbitrary functions in a cell (apply, a lambda) |
the scalar vocabulary is closed; the host is the place for host code |
| List-columns and nested data | god reads a table of plain values; nest and unnest in the host |
widen with several value columns at once |
one name, one value per widen; run it twice and join |
| Joins on anything but equality (ranges, nearest) | equality joins only; inequality joins in the host |
| Random sampling | neither built nor refused, for the reason below; sample in the host, then hand the table over |
| The long aggregate shelf (quantiles, weighted means, mode) | eleven aggregations; variance is the deviation squared, standard_deviation([x]) * standard_deviation([x]); the rest via show_as |
| Row-wise aggregates across many columns | one value per column sweeps a calculation across columns one at a time; a row-wise sum of fifty columns is the host’s |
Window frames beyond a count of rows (RANGE, a duration) |
rolling(average([x]), 7) is the seven-row window; a window measured by a value’s distance (the last seven days, however many rows) stays in the host |
| Joining every row to every row (a cross join) | no spelling; add_combinations crosses the values two columns already hold, and a cross join of two whole tables stays in the host |
Reading a file into a pipeline (scan_csv, scan_parquet) |
read it in the host and hand the frame over; for data that outgrows the machine, somewhere else |
One of these is a refusal with a law behind it rather than an absence, and the distinction matters. An arbitrary function in a cell will not arrive later, because the closed-cell law refuses it on purpose.
Random sampling is the row to read carefully, because it is neither a refusal nor an ordinary absence. Randomly chosen rows are everyday work, and the seed is what stands in the way. A seed written into a sentence is a value that changes the answer without changing the question, which is the thing the settled-answer law forbids. Refusing it outright is not obviously right either, so it is recorded as a lead and left open. If it is ever taken, this page says so rather than quietly changing.
The others are ordinary absences, candidates like any other word, waiting on the growth test every candidate faces.
E.2 What god does that they do not
- One vocabulary in two languages. The same sentence, spelled the same, in R and in Python, with the differences confined to the pipe and the column. Nothing else on this list matters more.
- The whole pipeline checked before anything runs. A six-step pipeline with a typo in step five costs nothing and names step five.
- Refusals written by one voice, carrying their repair. Not the engine’s stack trace, whichever engine it was.
- Assumptions printed back. Where the grammar decided something you did not say, the decision is printed beside the answer.
matching: the join that cannot multiply rows, so the question “has a partner?” is a different word from the act “bring columns in”.- The same sentence wherever it goes. DuckDB and Spark execute it;
dplyr,pandas,polarsand PySpark receive it as readable code; a warehouse runs it where the table lives. - An exit that is part of the design. Leaving
godcosts oneshow_asper pipeline. That is the strongest promise a small tool can make, and the reason its smallness is safe to depend on.
E.3 How this list stays honest
Both halves of this page age, in opposite directions. The plan is the same as for every claim in this book: dated, and corrected in public when it drifts. If you catch either list out of date, that is a defect worth an issue, exactly like a refusal that stopped refusing.