Rtcl is a Tcl extension for executing code in the R [L1 ] programming language. R is a free version of Bell Labs' S language for statistical computing. Rtcl embeds an R interpreter into Tcl, and allows access to it via Tcl commands. The latest version of Rtcl is available from


Rtcl was originally written by Neil McKay. His last published version is available from


Installation on macOS

TR I have successfully compiled and used the package on macOS Catalina (10.15.7), using Rtcl version 1.2.1. R version 4.0.4 is installed and lives under /Library/Frameworks/R.framework/Resources. This is the directory returned by


Compiling Rtcl using just with ./configure; make; make install works. However, I am getting the error message cannot load libR from the Rtcl package when I do package require Rtcl. This is because Rtcl cannot find the installed R. First, the R_HOME environment variable is not set by R, so the initialization script in Rtcl cannot use it. Second, the paths to R hard-coded into Rtcl do not match my installation, so Rtcl cannot find R at that place either. It doesn't help much to add the correct path in Rtcl's init code. This will help loading the library in Tcl but then R fails with saying cannot find system Renviron. It turns out that the easy solution is to just define the R_HOME environment variable and set it to the output of R RHOME. Depending on your setup, you can just put it into your profile:

    export R_HOME=`R RHOME`

You could also include it into the pkgIndex.tcl file of Rtcl, before the actual libRtcl1.2.1.dylib library is loaded, e.g.:

    set env(R_HOME) [exec /usr/local/bin/R RHOME]
    package ifneeded Rtcl 1.2.1 \
        [list load [file join $dir libRtcl1.2.1.dylib] Rtcl]


The package provides four new commands in the rtcl namespace:

    ::rtcl::eval ?-verbose? R Expression(s)
    ::rtcl::source ?-verbose? foo.R
    ::rtcl::gettype ?-verbose? R Expression(s)
    ::rtcl::getvalue ?-verbose? R Expression(s)

Here's an example output from the console:

    % package require Rtcl
    % # the following will just execute some R code without returning anything:
    % ::rtcl::eval "a <- c(1:10)"
    % # if you want to see the content of 'a', you need:
    % ::rtcl::getvalue a
    1 2 3 4 5 6 7 8 9 10
    % # getvalues does also execute the command, so you can do both in one step:
    % ::rtcl::getvalue "a <- c(1:10)"
    1 2 3 4 5 6 7 8 9 10
    % # loading R libraries works as usual:
    % ::rtcl::eval library(sf)
    % we can transfer data to R and get results back like this:
    % set x 5
    % set result [::rtcl::getvalue "$x * $x"]
    % 25.0
    % puts $result
    % note, that Rtcl returned a 'real' value:
    % ::rtcl::gettype "$x * $x"
    % ... when doing this in plain R, you will get "25" and 'class(5*5)' will return only 'numeric', so 'real' is the safe choice ...