File: passdata.rb

package info (click to toggle)
r-cran-rinside 0.2.19-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 668 kB
  • sloc: cpp: 3,310; ansic: 117; xml: 57; ruby: 34; makefile: 2
file content (31 lines) | stat: -rw-r--r-- 854 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
require 'ffi'

module R
  extend FFI::Library
  libdir = `Rscript -e \'cat(find.package("RInside"))\'`
  ffi_lib "#{libdir}/lib/libRInside.so"
  attach_function :setupRinC, [ ], :void
  attach_function :evalQuietlyInR, [ :string ], :void
  attach_function :evalInR, [ :string ], :pointer
  attach_function :teardownRinC, [ ], :void
end

module Rlib
  extend FFI::Library
  ffi_lib "libR.so"
  attach_function :Rf_PrintValue, [ :pointer ], :void
  attach_function :REAL, [ :pointer ], :pointer
end

#~ Create a variable and set its value in R
#~ Pass the SEXP from R to Ruby
#~ Call Rf_PrintValue from Ruby
R.setupRinC()
R.evalQuietlyInR("y <- 4.5")
Rlib.Rf_PrintValue(R.evalInR("y"))

#~ Obtain a pointer in Ruby to the data array underlying
#~ the v created in R
R.evalQuietlyInR("v <- c(1.5, 3.4, 4.2)")
puts Rlib.REAL(R.evalInR("v"))
R.teardownRinC()