- Note
-
This post is unlikely to be useful for most people, so please feel free to skip it unless you maintain an R package that has a lot of reverse dependencies.
The number of reverse dependencies of the knitr package (and rmarkdown) reached 10,000 a couple of years ago, about which I have mixed feelings. On one hand, it’s great that so many packages depend on knitr and rmarkdown; on the other hand, it means checking reverse dependencies becomes a more and more daunting task.
One problem is, with this many reverse dependencies, CRAN’s reverse dependency check will almost surely find false positive problems. Every single time I submit a new version of knitr or rmarkdown to CRAN, I’ll receive a report telling me that they failed certain packages. Sometimes the logs can run thousands of lines! The log looks like this:
Package: lwqs
Check: re-building of vignette outputs
New result: ERROR
Error(s) in re-building vignettes:
...
--- re-building ‘lwqs-vignette.Rmd’ using rmarkdown
Quitting from lwqs-vignette.Rmd:201-219 [unnamed-chunk-8]
Execution halted
Package: NeEDS4BigData
Check: tests
New result: ERROR
Running ‘spelling.R’ [0s/0s]
....
It’s a huge pain to scan through the logs and find out which packages are really broken by me. I’m sure that some problems are not my fault, like this one (connectivity issues):
Package: tsfeatures
Check: examples
New result: ERROR
Running examples in ‘tsfeatures-Ex.R’ failed
trying URL 'https://github.com/robjhyndman/tsfeatures/raw/master/extra-data/yahoo.rda'
Warning in utils::download.file("https://github.com/robjhyndman/tsfeatures/raw/master/extra-data/yahoo.rda", :
cannot open URL 'https://github.com/robjhyndman/tsfeatures/raw/master/extra-data/yahoo.rda': HTTP status was '504 Gateway Timeout'
Execution halted
However, I still have to read through all logs to be sure.
In 2024, I couldn’t stand this anymore, so I wrote a small JS
snippet to
transform these logs into tabsets. The script splits the text at each Package:
marker and wraps the results in tab structures. Each tab shows one package name
(with a link to its CRAN check page) and its log output.
To use the JS snippet, you can open the log (here’s an example log) in a browser and copy/paste the JS code into the browser console. The page transforms from a wall of text into organized tabs. Instead of scrolling through the entire log, I can click a tab and see what went wrong with each package without being overwhelmed by the sheer volume of logs.
The JS snippet was essentially a quick regex exercise and built on top of the minimal tabset implementation that I created in 2023.
Donate
As a freelancer (currently working as a contractor) and a dad of three kids, I truly appreciate your donation to support my writing and open-source software development! Your contribution helps me cope with financial uncertainty better, so I can spend more time on producing high-quality content and software. You can make a donation through methods below.
-
Venmo:
@yihui_xie, or Zelle:xie@yihui.name -
Paypal
-
If you have a Paypal account, you can follow the link https://paypal.me/YihuiXie or find me on Paypal via my email
xie@yihui.name. Please choose the payment type as “Family and Friends” (instead of “Goods and Services”) to avoid extra fees. -
If you don’t have Paypal, you may donate through this link via your debit or credit card. Paypal will charge a fee on my side.
-
-
Other ways:
WeChat Pay (微信支付:谢益辉) Alipay (支付宝:谢益辉) 

When sending money, please be sure to add a note “gift” or “donation” if possible, so it won’t be treated as my taxable income but a genuine gift. Needless to say, donation is completely voluntary and I appreciate any amount you can give.
Please feel free to email me if you prefer a different way to give. Thank you very much!
I’ll give back a significant portion of the donations to the open-source community and charities. For the record, I received about $30,000 in total (before tax) in 2024-25, and gave back about $15,000 (after tax).