In case you aren't aware, TinyTeX has started offering binaries for ARM and musl-based Linux since last month: yihui.org/en/2026/03/t... Enjoy the extra 5 minutes saved!
BTW, I didn't know musl/Alpine Linux before. While working on TinyTeX binary for it, I was intrigued and also quite impressed.
Posts by Yihui Xie
Alternatively you can use the shell script to install it (which I'd recommend because the script is always up-to-date and not subject to the R package tinytex): yihui.org/tinytex/#ins... 2/2
If you install TinyTeX via tinytex::install_tinytex(), please make sure you are using the latest CRAN version of tinytex (>= v0.59): github.com/rstudio/tiny... Older versions will point to an outdated download link and fail the installation. 1/2
The alternative is I provide an option so edge case users can explicitly grab the extra resources when needed. I don't like this manual solution, but it's hard to make it automatic (possible, but that would be a long way to go).
For this particular problem, I don't need AI engineers. It's a matter of human decision. If I don't care about this 400Kb, I could ship this bloat to all users, which would make my life (code) easier but is wasteful to most users. The bloat is only for edge cases.
My first experiment with using Rust in an R package: github.com/yihui/tinyimg Blog post: yihui.org/en/2026/03/t... I failed to figure out an ideal universal threshold for the color difference for lossy PNG optimization. If anyone has expertise on this, I'll truly appreciate your help!
So sad... I can't imagine what this meant for his family. It hurts so much when I think of his 1 year old son... I just wrote down a few memories about Tomas in a blog post: yihui.org/en/2026/04/t...
Sometimes I feel I must be crazy to spend a whole day trying to come up with a proper solution to save only 400Kb for users. Storage is cheap, bandwidth is fast, my time is precious, and does anyone (besides my insane self) care about this 400Kb at all?
I'm not sure if I can explain this in a short message, but historically it was not easy to define S3 methods in your package on S3 generics from other ppl's pkgs without taking hard dependency on their pkgs. Things have changed later. Now it's just a few lines of code like github.com/yihui/gglite...
So your idea of using S3 methods is absolutely a great one, but it all depends on whether the function is S3, e.g. print() and summary(), perfect; table() and title(), nope...
Actually no, it's not forbidden. S3 was designed to be extensible, not only by the owner of the S3 generic, but any other people. You are allowed to define an S3 method on an S3 generic that you don't own (e.g. in base R). Unfortunately, many good names are not S3, such as `stats::filter()`.
`grepl('^[A-Z]', commit_message)` is a simple indicator on whether the work was done by me or AI. If a git commit message starts with a lowercase letter, you can know for sure the work was done by my own fingers because I'm often too lazy/tired to press Shift when writing a commit message.
Yes, that's a good idea in some cases. For a package that often requires users to call multiple functions in one expression (e.g. pipe), I feel the prefix naming approach is quite clumsy, e.g.
do_setup(data) |>
do_process(args...) |>
do_more(...) |>
do_summarize() |>
do_view()
Perhaps this should be called "liteeval"... github.com/yihui/gglite...
I share only one goal with tidyeval: to have a way to avoid typing quotes on variable names. Other than that, I have no interest in tidyeval and never tried to learn the magic there. Formula is only for typing and extracting bare variable names as strings, and there's no eval() going on at all.
Thank you! I have to admit that I have far less expertise on graphics than on R Markdown, although it had been my strongest interest for a number of years in the beginning of my R journey. Needless to say, I'd welcome any feedback from experts like you!
Oh yes, "reverse title case" to the rescue! titlE(), legenD(), datA(), vieW()... Or "wave case": LaOuT(), tRaNsFoRm(), BoXpLoT()... Suddenly so many free names to claim! AI doesn't need to press Shift when coding for us, so no problem for AI agents. Deal.
Naming used to be hard because it was just hard to come up with good names (expressive, memorable, etc). Now I think naming is hard mostly because good names have been exhausted. I feel so hard to find a verb or noun for a func name that hasn't been used in base R or any moderately popular R package
One of the best things for keeping things ultra lightweight is that webR-based applications can run faster, e.g., pkg.yihui.org/gglite/playg...
I think that has become my pattern---trying to avoid pandoc, knitr, htmlwidgets, jquery, bootstrap... For this particular pkg, if two <script> tags work just fine, there's no reason to introduce deps on htmlwidgets (yes, the pkg works for rmarkdown, quarto, and even jupyter although i use none)
I have to emphasize that it's still at a very very stage and many things haven't settled (even function names). I've been thinking this for years but started (vibe) coding mostly from last week... Please feel free to provide feedback via Github issues, or send PRs from Copilot/Claude/whatever.
or:
within(data.frame(x = rnorm(10)), y <- 3 * x + 5)
Yes, (in theory) you can. I mentioned the possibility in the last section of the post.
The man (manual of R packages), the myth (extremely confusing), the legend (`graphics::legend()`). Generated via Google Gemini with my intentionally confusing prompts.
No one understands my soul better than you.
Sorry I'm a few years late to the party, but I'm here finally! :) yihui.org/en/2026/01/h... Thank you all so much for your generous support over the past two years!
With knitr/rmarkdown, you can also include other chunks in one chunk: bookdown.org/yihui/rmarkd... Unless I misread Knuth's paper when I was a graduate student, I think knitr had implemented what he mentioned.
Unfortunately or maybe fortunately, it's no longer actively maintained because there isn't much to maintain anymore. Pin the Hugo version, and then it's stable as rock :)
I wonder if this new $600 iPhone would last another 10 years. I'm not optimistic about it... I hate that things are so tightly tied to phones, and phone apps become the only way out.
Finally I had to let go my 10-year-old iPhone 6 last week because I must install MS Authenticator. Basically my old iPhone couldn't install any app due to its age, which had been fine to me because I use only one app primarily until last week when certain IT department started requiring this MS app.