Comments (5)
Not quite 'always'. The R garbage collector is currently a generational mark/sweep design that examines the 'named' field in the sxpinfo 32-bit word at the beginning of an SEXPREC. A value of 0 means that the object is not assigned to a name and is available for garbage collection unless it can be reached from another object. I'm not clear on the distinction between values of 1 and 2 in that field.
The conservative approach is to call PreserveObject on every value from rawvector
or to copy the values into Julia objects. Copying would mean that you couldn't modify the object's value as seen by R, which you may want to do. Also, it can result in unnecessary storage allocation. Calling PreserveObject on the value results in its not being available for garbage collection in R and could mean excessive storage allocation. If PreserveObject were to be called then the Julia object should have a finalizer that calles ReleaseObject.
Perhaps it would be best to have a discussion on the julia-stats list regarding the best strategy. I'll start a thread.
from rcall.jl.
Don't we always need to protect a R object from GC when we expose it to julia? My example in #6 clear shows that it is necessary.
I understand that PreserveObject
and ReleaseObject
should be using as a pair. And that is precisely what Rif.jl and RCalling.jl are actually doing.
It may not be desirable to call PreserveObject on every element of rawvector
of a long vector.
From my experience in RCalling.jl, if the number of preserved objects is large, say 100,000. The time to execute the finalizers can takes up to 30 secs, which is of course not acceptable.
It would be beneficial to have a discussion on the julia-stats list.
from rcall.jl.
There can cases where an R object does not need protection, if, for example, you are going to copy it into a Julia object immediately. If you just want an R dataset you could retrieve it in R and immediately copy the contents to Julia vectors. Evaluating a symbol in R returns an object that, by definition, has a named field of 2, and hence will not be garbage collected.
from rcall.jl.
See the julia-stats thread
from rcall.jl.
from rcall.jl.
Related Issues (20)
- Allow usage of Preferences.jl to configure R_HOME HOT 2
- Error happens when you try to execute command ENV["R_HOME"] HOT 4
- libR.so in nonstandard location HOT 3
- why building RCall.jl failed during the registration of an package HOT 2
- RCall.jl failed to build with Conda (23.3.1) HOT 3
- "is.na() applied to non-(list or vector) of type 'language'" when passing a Julia's boolean variable to R's smooth.spline HOT 2
- Unable to Pkg.build RCall HOT 4
- Find the number of arguments for an RFunction? HOT 1
- loading RCall in atreplinit fails because of RPrompt HOT 1
- Error: attempt to apply non-function HOT 4
- [BUG] ArgumentError: malformed expression in formula HOT 3
- If julia functions which was brought to R throws an error, no real error is thrown, but an error object is returned #216 HOT 3
- Feature Request: Add possibility to build RCall without having R_HOME set HOT 2
- ERROR: UndefVarError: `val` not defined
- Segmentation fault on closing julia HOT 7
- equal `==` is not working on `reval` HOT 2
- Feature Request: Make RCall depend dynamically on `R_HOME` HOT 8
- Feature Request: show/display methods for R plots like ggplot2 HOT 3
- Could we add a point in the docs about setting up CI ? HOT 6
- ERROR: REvalError: Loading required package: mvtnorm HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rcall.jl.