Renjin
is an JVM based implementation of the interpreter. They claim that:
Unlike GNU R, Renjin is multithreaded and will run happily in a Platform-as-a-Service environment such as Google Appengine, AWS Elastic Beanstalk, Heroku or Microsoft Azure.
#resource
http://www.bedatadriven.com/products/renjin.html
Still, the actual R packages we would call from R may not be thread safe.
See Jep
documentation explaining this issue from standpoint of calling CPython
from Java/Scala
.
https://github.com/ninia/jep/wiki/How-Jep-Works#threading-complications
Due to complications and limitations of JNI, a thread that creates a Jep instance must be reused for all method calls to that Jep instance. Jep will enforce this and throw exceptions mentioning invalid thread access. (In the future we hope to simplify or provide utilities for thread management).
More than one Jep instance should not be run on the same thread at the same time. While this is technically allowed, it can potentially mess up the thread state and lead to deadlock in the Python interpreter. This will probably be changed to throw an exception if encountered in the future.
So, there seems to be hope with Renjin
but actual binary (C/C++, etc) packages used need to be verified for thread safety.
There are other R implementations
https://dynamicecology.wordpress.com/2014/01/14/r-isnt-just-r-anymore/