A couple of days ago I just found out that when you install R with Homebrew you don’t get all the capabilities that the binary from CRAN have. In other words, you have a kind of second class install, in some regards, and depending on how you do install and for what you are going to use R.
1 2 3 4 5 6 7 8 >capabilities() jpeg png tiff tcltk X11 aqua FALSE FALSE FALSE FALSE FALSE TRUE http/ftp sockets libxml fifo cledit iconv TRUE TRUE TRUE TRUE TRUE TRUE NLS profmem cairo ICU long.double libcurl TRUE TRUE FALSE TRUE TRUE TRUE
1 2 3 4 5 6 7 >capabilities() jpeg png tiff tcltk X11 aqua TRUE TRUE TRUE TRUE TRUE TRUE http/ftp sockets libxml fifo cledit iconv TRUE TRUE TRUE TRUE TRUE TRUE NLS profmem cairo ICU long.double libcurl TRUE TRUE TRUE TRUE TRUE TRUE
How did I notice? Well basically I was about to update the sm package in one of my computers and R yield an error similar to this one (sorry I didn’t copy the original one):
1 2 3 4 5 6 Error: package or namespace load failed for ‘tcltk’: .onLoad failed in loadNamespace() for 'tcltk', details: call: fun(libname, pkgname) error: Tcl/Tk support is not available on this system In addition: Warning message: S3 methods ‘as.character.tclObj’, ‘as.character.tclVar’, ‘as.double.tclObj’, ‘as.integer.tclObj’, ‘as.logical.tclObj’, ‘as.raw.tclObj’, ‘print.tclObj’, ‘[[.tclArray’, ‘[[<-.tclArray’, ‘$.tclArray’, ‘$<-.tclArray’, ‘names.tclArray’, ‘names<-.tclArray’, ‘length.tclArray’, ‘length<-.tclArray’, ‘tclObj.tclVar’, ‘tclObj<-.tclVar’, ‘tclvalue.default’, ‘tclvalue.tclObj’, ‘tclvalue.tclVar’, ‘tclvalue<-.default’, ‘tclvalue<-.tclVar’, ‘close.tkProgressBar’ were declared in NAMESPACE but not found
As you can see I’ve highlighted the key line, R doesn’t have tcltk available and running in that system and if you run
capabilities() in the R console you’ll probably get something similar to the first code-block. After researching a little bit about the problem [1 & 2], I found out what I’ve already said, Homebrew R isn’t build with those capabilities. Why? Well…
- It seems that those capabilities are optional when you build R from source and build R with those capabilities / options on Homebrew’s bottle server is “error prone”.
- To have some of the missing capabilities you must have in your system X11/XQuartz, which isn’t installed in every Mac, because it’s not longer provided as macOS basic installation.
- You can install X11/XQuartz, but you have to do it with Homebrew Cask, since it can’t be build from source. As a consequence is a off project dependency and they don’t want to rely on that.
- Homebrew seems to be heading to a option-less direction where the formulas aren’t going to have any option at all. So if you want to have options or different kind of build they encourage you to have your own tap.
Whether you agree or not, you have to understand that the maintainers of Homebrew-core took this direction for a reason, which is probably they have already too much work to do. Don’t forget they maintain the package manager for free. If you disagree, as I do, at least partly, please be polite. A lot of users have been expressing their disagreement in really bad manners lately and that is not acceptable.
Lucky for us users, there is a solution to the problem. You can always create your own tap of Homebrew and tweak the formula to fit your needs, as maintainers suggest. As a result someone already did that and there is already a tap which you can install R with the same formula we installed R when it was in Homebrew Science, but up to day.
I’ll explain in my next post how to install R using that tap.