All notable changes to this project will be documented in this file. This change log follows the conventions of keepachangelog.com.
- depdendency updates (clojure: "1.10.2", tech.ml.dataset: "5.15")
- updating the tech.ml.dataset dependency to version "5.00-beta-28" (minor adaptation was required)
- updating the tech.ml.dataset dependency to version "5.00-beta-27"
- updated the tech.ml.dataset version (latest 5.0 beta)
- removed the Specter dependency
- removed Renjin -- it will be supported in a separate library -- discussion here
- ADDED vrksasna draft for session management
- a very minor extension of clojisr internals to support that
- removed GCReference (and tech.resource dependency) - replaced by
proxy
object. - added clojure.async latest dependency
- [hot fix] datasets are not transfered as
data.frame
due to implementation of map
interfaces in t.m.ds 3.01
clojisr.v1.rserve
and clojisr.v1.renjin
namespaces are deprecated now- setting default session type moved to
clojisr.v1.r/set-default-session-type!
function - refactoring of RServe process spawn and connection to mitigate (#62)
- abandoned sessions/R processes cleaning fixes
tech.ml/dataset
bumped to 3.01 version
- regresion with
quote
(#61), changed to use :!wrap
hint - datetime conversion to string fixes
tech.ml.dataset
bumped to 2.15 version- (experimental) turned off
pomegranate
dynamic dep loading for renjin
Note: quote
function doesn't work properly
- refactored data and dataset transition between clojure and R backend as described here (#14)
tech.ml.dataset
bumped to 2.13 version- removed
java->naive-clj
and added java->native-clj
require-r
is moved to clojisr.v1.r
(direct call to clojisr.v1.require/require-r
is possible but deprecated)- reflection warnings mitigation
- integer transition (#73)
- ##Inf/##-Inf transition (#72)
- wrapping into
()
and {}
(#61) - unary operator wraps next form into parentheses (#59)
- missing path is created when plotting (#56)
- operators wrapped into % (like
%chin%
) are treated as binary operators (#55)
- updates in exception handling
- updated tech.datatype, tech.ml.dataset dependency versions with some small code adaptation (#64)
- notespace is no longer a dependency
rsymbol
introduced- moved to
lein-tools-deps
and all deps are defined in deps.edn
now
- new forms added:
if
, do
, for
and while
- more binary operators:
%%
, %/%
, **
and %in%
- sequences beginning with command as backticked string are now callable (eg. '("
^
" 2 4)) - vector starting with
:!code
is callable - JVM shutdown hook is registered to clean all R processes which are run when closing java process
bra
, brabra
, bra<-
, brabra<-
can accept nil
as empty-symbol
now. data
function introduced (to load data from package)- removed
empty-symbol
(use nil
in brackets) and na
(use just 'NA) - picking a random free port as the default Rserve port
- updating notespace dep version
- updating tech.ml.dataset dep version
- changed logging to
clojure/tools.logging
- major breaking change: a new set of code-generation rules
- bugfix for plotting (to draw a chart
print
should be called instead of plot
) - tech.ml libraries bumped
- deps updated
- bugfix: recognizing S4 functions ("standardGeneric")
- bugfix: handling session-args carefully on r->clj data conversion
- Clojure working directory is now set on R side
- print-loop bound to session (#42)
- RConnection locking revisited (#40)
- GC rewritten (#25)
- More careful session management (all atoms are now
defonce
, closed?
depends on processes state) - fixed rmarkdown bug (wrong usage of gc)
- require-r:
- :arglists tag added for required R functions
- warning when package is not found
- bugfix for problems when dynamically loading renjin jar:
- using pomegranate directly, rather than alembic (to suppoert Java newer than Java 8)
- handling classloaders carefully
- a new API for data visualization, with more rendering options
- bugfix of a problem with using Alembic (making sure https is used)
- change in the setup API of backends: requiring the main namesapce of a backend (renjin/rserve) sets default session-type, if no other default has been set yet;
require-r
can :refer :all
now- REXPList, REXPNull are supported in data conversion
- changed the API for setting up and switching backends ("session-types")
- also fixed #27 by loading the renjin Jar on-the-fly with the proper repository into
The main changes on the user side are the fact that R functions are Clojure functions, and the initial suppoort for a Renjin backend. Details below:
- performance improvement: using an R environment rather than an R list for session memory
- some refactoring to allow other kinds of R backends, in particular exending the Session protocol to take care of details such as printing and package in spection
- more careful id management of sessions
- checking the object class on creation of R objects
- being careful when printing objects of lost sessions
- R objects now extend the IFn inerface, so that R functions are Clojure functions
- bugfix in regreshing objects across sessions
- simplified the implementation of
require-r
-- functions can now be handled as regular objects - handling of strange symbols/keywords: refactored a bit, added some filtering
- initial support of a Renjin (pure-JVM R) backend
- handling failures in
require-r
- changes in logging
- handling unhandled cases in java->naive-clj conversion
- loading data, not only functions, at
require-r
require-r
optimization: all underlying robjects are created once, then bound to namespaces- more careful handling of data conversion of list names: names with reader special characters are not converted to keywords
- added '$ as binary operator
- performance bugfix: using native double array and type hint when conferting integer R vectors with missing values to clj
- recognizing reticulate python functions as functions
- bugfix in overriding default session args
Initial v1 version.
Main developments since earlier versions:
- code generation
- changes in error handling, printing, etc.
- requiring of R packages inspired by the python interop story (though less sophisticated)
- function call syntax a bit different (no detailed function signatures yet)
- documentation and tests using notespace
Initial draft version