scicom 0.3.0-java → 0.4.0-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +239 -55
- data/Rakefile +58 -5
- data/config.rb +34 -2
- data/doc/Array.html +153 -0
- data/doc/Java/OrgRenjinSexp/LogicalArrayVector.html +120 -0
- data/doc/Java/OrgRenjinSexp/StringArrayVector.html +133 -0
- data/doc/Java/RbScicom/MDDoubleVector.html +133 -0
- data/doc/MDArray.html +153 -0
- data/doc/MergeObservable.html +347 -0
- data/doc/NegRange.html +166 -0
- data/doc/PackageManager.html +823 -0
- data/doc/PackageManager/ParseXML.html +595 -0
- data/doc/Range.html +243 -0
- data/doc/Renjin.html +2210 -0
- data/doc/Renjin/Attributes.html +401 -0
- data/doc/Renjin/Closure.html +181 -0
- data/doc/Renjin/ComplexVector.html +557 -0
- data/doc/Renjin/DataFrame.html +258 -0
- data/doc/Renjin/Environment.html +279 -0
- data/doc/Renjin/Function.html +243 -0
- data/doc/Renjin/Index.html +628 -0
- data/doc/Renjin/List.html +398 -0
- data/doc/Renjin/Logical.html +352 -0
- data/doc/Renjin/Primitive.html +181 -0
- data/doc/Renjin/RBSexp.html +1151 -0
- data/doc/Renjin/RubySexp.html +498 -0
- data/doc/Renjin/Vector.html +3163 -0
- data/doc/RinRuby.html +2079 -0
- data/doc/_index.html +365 -0
- data/doc/class_list.html +58 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +57 -0
- data/doc/css/style.css +339 -0
- data/doc/file.README.html +159 -0
- data/doc/file_list.html +60 -0
- data/doc/frames.html +26 -0
- data/doc/index.html +159 -0
- data/doc/js/app.js +219 -0
- data/doc/js/full_list.js +181 -0
- data/doc/js/jquery.js +4 -0
- data/doc/method_list.html +939 -0
- data/doc/top-level-namespace.html +679 -0
- data/lib/JRubyR/attributes.rb +5 -2
- data/lib/JRubyR/callback.rb +115 -0
- data/lib/JRubyR/environment.rb +0 -1
- data/lib/JRubyR/indexed.rb +139 -0
- data/lib/JRubyR/list.rb +0 -16
- data/lib/JRubyR/logical_value.rb +0 -1
- data/lib/JRubyR/rbsexp.rb +20 -131
- data/lib/JRubyR/renjin.rb +201 -71
- data/lib/JRubyR/vector.rb +16 -15
- data/lib/scicom.rb +1 -3
- data/target/helper.jar +0 -0
- data/test/test_R_interface.rb +1 -1
- data/test/test_array.rb +1 -1
- data/test/test_assign_mdarray.rb +1 -1
- data/test/test_assign_mdarray_2d.rb +1 -1
- data/test/test_assign_mdarray_3d.rb +1 -1
- data/test/test_attributes.rb +1 -1
- data/test/test_basic.rb +7 -5
- data/test/test_callback.rb +176 -0
- data/test/test_complete.rb +1 -1
- data/test/test_creation.rb +29 -5
- data/test/test_dataframe.rb +1 -1
- data/test/test_factor.rb +1 -1
- data/test/test_functions.rb +13 -10
- data/test/test_linear_model.rb +1 -1
- data/test/test_list.rb +49 -10
- data/test/test_matrix.rb +6 -6
- data/test/test_operators.rb +1 -1
- data/test/test_package.rb +5 -5
- data/test/test_vector.rb +13 -7
- data/vendor/aether-api-1.0.2.v20150114.jar +0 -0
- data/vendor/aether-connector-basic-1.0.2.v20150114.jar +0 -0
- data/vendor/aether-impl-1.0.2.v20150114.jar +0 -0
- data/vendor/aether-spi-1.0.2.v20150114.jar +0 -0
- data/vendor/aether-transport-file-1.0.2.v20150114.jar +0 -0
- data/vendor/aether-transport-http-1.0.2.v20150114.jar +0 -0
- data/vendor/aether-util-1.0.2.v20150114.jar +0 -0
- data/vendor/aopalliance-1.0.jar +0 -0
- data/vendor/asm-3.3.1.jar +0 -0
- data/vendor/asm-5.0.4.jar +0 -0
- data/vendor/asm-commons-5.0.4.jar +0 -0
- data/vendor/asm-tree-5.0.4.jar +0 -0
- data/vendor/asm-util-5.0.4.jar +0 -0
- data/vendor/blas-0.8.jar +0 -0
- data/vendor/cdi-api-1.0.jar +0 -0
- data/vendor/codemodel-2.6.jar +0 -0
- data/vendor/collections-generic-4.01.jar +0 -0
- data/vendor/commons-codec-1.6.jar +0 -0
- data/vendor/commons-compress-1.4.1.jar +0 -0
- data/vendor/commons-logging-1.1.1.jar +0 -0
- data/vendor/commons-math-2.2.jar +0 -0
- data/vendor/commons-vfs2-2.0.jar +0 -0
- data/vendor/datasets-0.8.1891.jar +0 -0
- data/vendor/f2jutil-0.8.jar +0 -0
- data/vendor/gcc-runtime-0.8.1891.jar +0 -0
- data/vendor/grDevices-0.8.1891.jar +0 -0
- data/vendor/graphics-0.8.1891.jar +0 -0
- data/vendor/guava-17.0.jar +0 -0
- data/vendor/httpclient-4.2.6.jar +0 -0
- data/vendor/httpcore-4.2.5.jar +0 -0
- data/vendor/javax.inject-1.jar +0 -0
- data/vendor/jcl-over-slf4j-1.6.2.jar +0 -0
- data/vendor/joda-time-2.0.jar +0 -0
- data/vendor/jsr250-api-1.0.jar +0 -0
- data/vendor/jtransforms-2.4.jar +0 -0
- data/vendor/jung-api-2.0.1.jar +0 -0
- data/vendor/jung-graph-impl-2.0.1.jar +0 -0
- data/vendor/lapack-0.8.jar +0 -0
- data/vendor/maven-aether-provider-3.1.0.jar +0 -0
- data/vendor/maven-model-3.1.0.jar +0 -0
- data/vendor/maven-model-builder-3.1.0.jar +0 -0
- data/vendor/maven-repository-metadata-3.1.0.jar +0 -0
- data/vendor/maven-scm-api-1.4.jar +0 -0
- data/vendor/maven-scm-provider-svn-commons-1.4.jar +0 -0
- data/vendor/maven-scm-provider-svnexe-1.4.jar +0 -0
- data/vendor/maven-settings-3.1.0.jar +0 -0
- data/vendor/maven-settings-builder-3.1.0.jar +0 -0
- data/vendor/methods-0.8.1891.jar +0 -0
- data/vendor/netlib-java-0.9.3-renjin-patched-2.jar +0 -0
- data/vendor/org.eclipse.sisu.inject-0.0.0.M2a.jar +0 -0
- data/vendor/org.eclipse.sisu.plexus-0.0.0.M2a.jar +0 -0
- data/vendor/plexus-cipher-1.4.jar +0 -0
- data/vendor/plexus-classworlds-2.4.jar +0 -0
- data/vendor/plexus-component-annotations-1.5.5.jar +0 -0
- data/vendor/plexus-interpolation-1.16.jar +0 -0
- data/vendor/plexus-sec-dispatcher-1.3.jar +0 -0
- data/vendor/plexus-utils-1.5.6.jar +0 -0
- data/vendor/plexus-utils-3.0.10.jar +0 -0
- data/vendor/regexp-1.3.jar +0 -0
- data/vendor/renjin-aether-package-loader-0.8.1891.jar +0 -0
- data/vendor/renjin-appl-0.8.1891.jar +0 -0
- data/vendor/renjin-core-0.8.1891.jar +0 -0
- data/vendor/renjin-gnur-runtime-0.8.1891.jar +0 -0
- data/vendor/renjin-script-engine-0.8.1891.jar +0 -0
- data/vendor/sisu-guice-3.1.0-no_aop.jar +0 -0
- data/vendor/slf4j-api-1.6.2.jar +0 -0
- data/vendor/stats-0.8.1891.jar +0 -0
- data/vendor/utils-0.8.1891.jar +0 -0
- data/vendor/xerbla-0.8.jar +0 -0
- data/vendor/xz-1.0.jar +0 -0
- data/version.rb +1 -1
- metadata +229 -127
- data/cran/AppliedPredictiveModeling.jar +0 -0
- data/cran/AppliedPredictiveModeling.xml +0 -25
- data/cran/AssetPricing.jar +0 -0
- data/cran/AssetPricing.xml +0 -25
- data/lib/env.rb +0 -12
- data/lib/rinruby.rb +0 -795
- data/test/env.rb +0 -2
- data/test/test_tmp.rb +0 -67
- data/vendor/Renjin.pdf +0 -0
- data/vendor/renjin-script-engine-0.7.0-RC7-SNAPSHOT-jar-with-dependencies.jar +0 -0
data/lib/JRubyR/renjin.rb
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
|
-
|
|
3
2
|
##########################################################################################
|
|
4
3
|
# @author Rodrigo Botafogo
|
|
5
4
|
#
|
|
@@ -21,13 +20,10 @@
|
|
|
21
20
|
# OR MODIFICATIONS.
|
|
22
21
|
##########################################################################################
|
|
23
22
|
|
|
24
|
-
require 'java'
|
|
25
23
|
require 'securerandom'
|
|
26
24
|
|
|
27
25
|
require_relative 'rbsexp'
|
|
28
|
-
require_relative 'package'
|
|
29
|
-
# require_relative 'index'
|
|
30
|
-
|
|
26
|
+
# require_relative 'package'
|
|
31
27
|
|
|
32
28
|
#==========================================================================================
|
|
33
29
|
#
|
|
@@ -37,15 +33,57 @@ class Java::RbScicom::MDDoubleVector
|
|
|
37
33
|
field_reader :_array
|
|
38
34
|
end
|
|
39
35
|
|
|
40
|
-
|
|
41
36
|
#==========================================================================================
|
|
42
37
|
#
|
|
43
38
|
#==========================================================================================
|
|
44
39
|
|
|
45
40
|
class Renjin
|
|
46
|
-
include_package "javax.script"
|
|
47
|
-
include_package "org.renjin"
|
|
41
|
+
# include_package "javax.script"
|
|
42
|
+
# include_package "org.renjin"
|
|
43
|
+
# include_package "org.renjin.aether"
|
|
44
|
+
include_package "org.renjin.script"
|
|
45
|
+
|
|
46
|
+
java_import "org.renjin.eval.SessionBuilder"
|
|
47
|
+
java_import "org.renjin.primitives.packaging.PackageLoader"
|
|
48
|
+
java_import "org.renjin.aether.AetherPackageLoader"
|
|
49
|
+
|
|
50
|
+
#========================================================================================
|
|
51
|
+
# Class Writer is necessary if we want to redirect the standard output or standar err
|
|
52
|
+
# to a Ruby String for futher processing after a Renjin script evaluation. As can be
|
|
53
|
+
# seen this class requires improvements, but it is functional
|
|
54
|
+
#========================================================================================
|
|
55
|
+
|
|
56
|
+
class Writer < Java::JavaIo.Writer
|
|
48
57
|
|
|
58
|
+
attr_reader :string
|
|
59
|
+
|
|
60
|
+
def initialize(buffer)
|
|
61
|
+
@string = buffer
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def write(string, offset, len)
|
|
65
|
+
@string << string
|
|
66
|
+
$stdout.pos = @string.length
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def flush
|
|
70
|
+
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def close
|
|
74
|
+
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def output
|
|
78
|
+
puts @string
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
#========================================================================================
|
|
84
|
+
#
|
|
85
|
+
#========================================================================================
|
|
86
|
+
|
|
49
87
|
@stack = Array.new
|
|
50
88
|
|
|
51
89
|
class << self
|
|
@@ -80,24 +118,18 @@ class Renjin
|
|
|
80
118
|
|
|
81
119
|
def initialize
|
|
82
120
|
|
|
83
|
-
@
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
when /cygwin/ then 'windows-cygwin'
|
|
89
|
-
when /java/
|
|
90
|
-
require 'java' #:nodoc:
|
|
91
|
-
if java.lang.System.getProperty("os.name") =~ /[Ww]indows/
|
|
92
|
-
'windows-java'
|
|
93
|
-
else
|
|
94
|
-
'default-java'
|
|
95
|
-
end
|
|
96
|
-
else 'default'
|
|
97
|
-
end
|
|
121
|
+
@session = SessionBuilder.new
|
|
122
|
+
.bind(PackageLoader.java_class, AetherPackageLoader.new)
|
|
123
|
+
.withDefaultPackages
|
|
124
|
+
.build
|
|
125
|
+
@engine = RenjinScriptEngineFactory.new.getScriptEngine(@session);
|
|
98
126
|
|
|
99
|
-
|
|
100
|
-
@
|
|
127
|
+
@default_std_out = @session.getStdOut()
|
|
128
|
+
@default_std_err = @session.connectionTable.getStderr()
|
|
129
|
+
|
|
130
|
+
# factory = Java::JavaxScript.ScriptEngineManager.new()
|
|
131
|
+
# @engine = factory.getEngineByName("Renjin")
|
|
132
|
+
raise "Renjin not found. Please check your CLASSPATH: #{$CLASSPATH}" if @engine == nil
|
|
101
133
|
super
|
|
102
134
|
|
|
103
135
|
end
|
|
@@ -106,6 +138,70 @@ class Renjin
|
|
|
106
138
|
#
|
|
107
139
|
#----------------------------------------------------------------------------------------
|
|
108
140
|
|
|
141
|
+
def set_std_out(buffer)
|
|
142
|
+
|
|
143
|
+
$stdout = StringIO.new(buffer)
|
|
144
|
+
@alternate_out = Writer.new(buffer)
|
|
145
|
+
print_writer = Java::JavaIo::PrintWriter.new(@alternate_out)
|
|
146
|
+
@session.setStdOut(print_writer)
|
|
147
|
+
self
|
|
148
|
+
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
#----------------------------------------------------------------------------------------
|
|
152
|
+
#
|
|
153
|
+
#----------------------------------------------------------------------------------------
|
|
154
|
+
|
|
155
|
+
def alternate_out
|
|
156
|
+
@alternate_out.string
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
#----------------------------------------------------------------------------------------
|
|
160
|
+
#
|
|
161
|
+
#----------------------------------------------------------------------------------------
|
|
162
|
+
|
|
163
|
+
def set_std_err(buffer)
|
|
164
|
+
|
|
165
|
+
$stderr = StringIO.new(buffer)
|
|
166
|
+
@alternate_err = Writer.new(buffer)
|
|
167
|
+
print_writer = Java::JavaIo::PrintWriter.new(@alternate_err)
|
|
168
|
+
@session.setStdErr(print_writer)
|
|
169
|
+
self
|
|
170
|
+
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
#----------------------------------------------------------------------------------------
|
|
174
|
+
#
|
|
175
|
+
#----------------------------------------------------------------------------------------
|
|
176
|
+
|
|
177
|
+
def alternate_err
|
|
178
|
+
@alternate_err.string
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
#----------------------------------------------------------------------------------------
|
|
182
|
+
#
|
|
183
|
+
#----------------------------------------------------------------------------------------
|
|
184
|
+
|
|
185
|
+
def set_default_std_out
|
|
186
|
+
|
|
187
|
+
$stdout = STDOUT
|
|
188
|
+
@session.setStdOut(@default_std_out)
|
|
189
|
+
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
#----------------------------------------------------------------------------------------
|
|
193
|
+
#
|
|
194
|
+
#----------------------------------------------------------------------------------------
|
|
195
|
+
|
|
196
|
+
def set_default_std_err
|
|
197
|
+
$stderr = STDERR
|
|
198
|
+
@session.setStdErr(@default_std_err)
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
#----------------------------------------------------------------------------------------
|
|
202
|
+
#
|
|
203
|
+
#----------------------------------------------------------------------------------------
|
|
204
|
+
|
|
109
205
|
def nan?(x)
|
|
110
206
|
is__nan(x)
|
|
111
207
|
end
|
|
@@ -130,7 +226,11 @@ class Renjin
|
|
|
130
226
|
end
|
|
131
227
|
|
|
132
228
|
#----------------------------------------------------------------------------------------
|
|
133
|
-
#
|
|
229
|
+
# When calling a R.<id>, we will call method_missing. This can be an assignment:
|
|
230
|
+
# R.name = <value>, can be a variable access: puts R.name, a call to a function without
|
|
231
|
+
# arguments R.<function> or a function with arguments. If it is a call to a function
|
|
232
|
+
# with arguments, then all arguments need to be parsed (and converted to R) and then
|
|
233
|
+
# the function is called.
|
|
134
234
|
#----------------------------------------------------------------------------------------
|
|
135
235
|
|
|
136
236
|
def method_missing(symbol, *args)
|
|
@@ -142,10 +242,8 @@ class Renjin
|
|
|
142
242
|
name.gsub!("rclass", "class")
|
|
143
243
|
|
|
144
244
|
if name =~ /(.*)=$/
|
|
145
|
-
super if args.length != 1
|
|
146
245
|
ret = assign($1,args[0])
|
|
147
246
|
else
|
|
148
|
-
# super if args.length != 0
|
|
149
247
|
if (args.length == 0)
|
|
150
248
|
# is_var = false
|
|
151
249
|
# Try to see if name is a variable or a method.
|
|
@@ -161,43 +259,6 @@ class Renjin
|
|
|
161
259
|
|
|
162
260
|
end
|
|
163
261
|
|
|
164
|
-
#----------------------------------------------------------------------------------------
|
|
165
|
-
# R built-in constants
|
|
166
|
-
#----------------------------------------------------------------------------------------
|
|
167
|
-
|
|
168
|
-
def pi
|
|
169
|
-
eval("pi")
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
def LETTERS
|
|
173
|
-
eval("LETTERS")
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
def letters
|
|
177
|
-
eval("letters")
|
|
178
|
-
end
|
|
179
|
-
|
|
180
|
-
def month__abb
|
|
181
|
-
eval("month.abb")
|
|
182
|
-
end
|
|
183
|
-
|
|
184
|
-
def month__name
|
|
185
|
-
eval("month.name")
|
|
186
|
-
end
|
|
187
|
-
|
|
188
|
-
def i(value)
|
|
189
|
-
eval("#{value}L")
|
|
190
|
-
end
|
|
191
|
-
|
|
192
|
-
def d(value)
|
|
193
|
-
eval("#{value}")
|
|
194
|
-
end
|
|
195
|
-
|
|
196
|
-
def md(value)
|
|
197
|
-
Renjin::Vector.new(build_vector(value))
|
|
198
|
-
end
|
|
199
|
-
|
|
200
|
-
|
|
201
262
|
#----------------------------------------------------------------------------------------
|
|
202
263
|
#
|
|
203
264
|
#----------------------------------------------------------------------------------------
|
|
@@ -243,7 +304,8 @@ class Renjin
|
|
|
243
304
|
end
|
|
244
305
|
|
|
245
306
|
#----------------------------------------------------------------------------------------
|
|
246
|
-
#
|
|
307
|
+
# Parse an argument and returns a piece of R script needed to build a complete R
|
|
308
|
+
# statement.
|
|
247
309
|
#----------------------------------------------------------------------------------------
|
|
248
310
|
|
|
249
311
|
def parse(*args)
|
|
@@ -288,6 +350,15 @@ class Renjin
|
|
|
288
350
|
|
|
289
351
|
end
|
|
290
352
|
|
|
353
|
+
#----------------------------------------------------------------------------------------
|
|
354
|
+
# Converts the given parameter into an R object. If the parameter is already an R
|
|
355
|
+
# object, then leave it unchanged.
|
|
356
|
+
#----------------------------------------------------------------------------------------
|
|
357
|
+
|
|
358
|
+
def convert(param)
|
|
359
|
+
R.eval(parse(param))
|
|
360
|
+
end
|
|
361
|
+
|
|
291
362
|
#----------------------------------------------------------------------------------------
|
|
292
363
|
# Data is copied from Ruby to R using the assign method or a short-hand equivalent. For
|
|
293
364
|
# example:
|
|
@@ -345,13 +416,16 @@ class Renjin
|
|
|
345
416
|
|
|
346
417
|
original_value = value
|
|
347
418
|
|
|
348
|
-
if ((value.is_a? MDArray) || (value.is_a? RubySexp))
|
|
419
|
+
if ((value.is_a? MDArray)) # || (value.is_a? RubySexp))
|
|
349
420
|
if (value.sexp != nil)
|
|
350
421
|
# MDArray already represented in R
|
|
351
422
|
value = value.sexp
|
|
352
423
|
else
|
|
353
424
|
value = build_vector(value)
|
|
354
425
|
end
|
|
426
|
+
elsif (value.is_a? RubySexp)
|
|
427
|
+
# puts "I'm a Sexp: #{value} and value.sexp is #{value.sexp}"
|
|
428
|
+
value = value.sexp
|
|
355
429
|
elsif (value == nil)
|
|
356
430
|
value = NULL
|
|
357
431
|
end
|
|
@@ -406,7 +480,7 @@ class Renjin
|
|
|
406
480
|
pm.load_package(name)
|
|
407
481
|
|
|
408
482
|
end
|
|
409
|
-
|
|
483
|
+
=begin
|
|
410
484
|
#----------------------------------------------------------------------------------------
|
|
411
485
|
#
|
|
412
486
|
#----------------------------------------------------------------------------------------
|
|
@@ -420,15 +494,65 @@ class Renjin
|
|
|
420
494
|
eval("library(#{package})")
|
|
421
495
|
|
|
422
496
|
end
|
|
497
|
+
=end
|
|
423
498
|
|
|
424
499
|
#----------------------------------------------------------------------------------------
|
|
425
|
-
#
|
|
500
|
+
# R built-in constants
|
|
426
501
|
#----------------------------------------------------------------------------------------
|
|
427
502
|
|
|
428
|
-
|
|
503
|
+
def pi
|
|
504
|
+
eval("pi")
|
|
505
|
+
end
|
|
506
|
+
|
|
507
|
+
def LETTERS
|
|
508
|
+
eval("LETTERS")
|
|
509
|
+
end
|
|
510
|
+
|
|
511
|
+
def letters
|
|
512
|
+
eval("letters")
|
|
513
|
+
end
|
|
514
|
+
|
|
515
|
+
def month__abb
|
|
516
|
+
eval("month.abb")
|
|
517
|
+
end
|
|
518
|
+
|
|
519
|
+
def month__name
|
|
520
|
+
eval("month.name")
|
|
521
|
+
end
|
|
522
|
+
|
|
523
|
+
def i(value)
|
|
524
|
+
eval("#{value}L")
|
|
525
|
+
end
|
|
526
|
+
|
|
527
|
+
def d(value)
|
|
528
|
+
eval("#{value}")
|
|
529
|
+
end
|
|
429
530
|
|
|
430
531
|
#----------------------------------------------------------------------------------------
|
|
431
|
-
#
|
|
532
|
+
# Creates a new Renjin Vector based on an MDArray
|
|
533
|
+
#----------------------------------------------------------------------------------------
|
|
534
|
+
|
|
535
|
+
def md(value)
|
|
536
|
+
Renjin::Vector.new(build_vector(value))
|
|
537
|
+
end
|
|
538
|
+
|
|
539
|
+
#----------------------------------------------------------------------------------------
|
|
540
|
+
# Packs a ruby class inside a RBSexp, so that methods in the Ruby class can be called
|
|
541
|
+
# back from inside an R script
|
|
542
|
+
#----------------------------------------------------------------------------------------
|
|
543
|
+
|
|
544
|
+
def rpack(ruby_class, scope: :external)
|
|
545
|
+
Renjin::Callback.pack(ruby_class, scope: scope)
|
|
546
|
+
end
|
|
547
|
+
|
|
548
|
+
#----------------------------------------------------------------------------------------
|
|
549
|
+
#
|
|
550
|
+
#----------------------------------------------------------------------------------------
|
|
551
|
+
|
|
552
|
+
private
|
|
553
|
+
|
|
554
|
+
#----------------------------------------------------------------------------------------
|
|
555
|
+
# Builds a Renjin vector from an MDArray.
|
|
432
556
|
#----------------------------------------------------------------------------------------
|
|
433
557
|
|
|
434
558
|
def build_vector(mdarray)
|
|
@@ -473,6 +597,8 @@ end
|
|
|
473
597
|
|
|
474
598
|
# Create a new R interpreter
|
|
475
599
|
R = Renjin.new
|
|
600
|
+
|
|
601
|
+
# Add some constants to the R interpreter
|
|
476
602
|
NA = R.eval("NA")
|
|
477
603
|
NaN = R.eval("NaN")
|
|
478
604
|
Inf = R.eval("Inf")
|
|
@@ -480,3 +606,7 @@ MInf = R.eval("-Inf")
|
|
|
480
606
|
NULL = R.direct_eval("NULL")
|
|
481
607
|
# EPSILON = R.eval("EPSILON")
|
|
482
608
|
# NA_integer = R.eval("NA_integer")
|
|
609
|
+
|
|
610
|
+
# create a R variable Ruby.Object that allow access to Ruby Object class
|
|
611
|
+
R.Ruby__Object = Renjin::Callback.new(Object)
|
|
612
|
+
|
data/lib/JRubyR/vector.rb
CHANGED
|
@@ -21,8 +21,6 @@
|
|
|
21
21
|
# OR MODIFICATIONS.
|
|
22
22
|
##########################################################################################
|
|
23
23
|
|
|
24
|
-
require 'java'
|
|
25
|
-
|
|
26
24
|
|
|
27
25
|
#==========================================================================================
|
|
28
26
|
#
|
|
@@ -36,6 +34,9 @@ class Java::OrgRenjinSexp::LogicalArrayVector
|
|
|
36
34
|
field_reader :values
|
|
37
35
|
end
|
|
38
36
|
|
|
37
|
+
class Java::OrgRenjinSexp::LongArrayVector
|
|
38
|
+
field_reader :values
|
|
39
|
+
end
|
|
39
40
|
|
|
40
41
|
#==========================================================================================
|
|
41
42
|
#
|
|
@@ -64,7 +65,7 @@ class Renjin
|
|
|
64
65
|
#----------------------------------------------------------------------------------------
|
|
65
66
|
|
|
66
67
|
def integer?
|
|
67
|
-
R.
|
|
68
|
+
R.eval("#{r}").is__integer.gt
|
|
68
69
|
end
|
|
69
70
|
|
|
70
71
|
#----------------------------------------------------------------------------------------
|
|
@@ -131,7 +132,7 @@ class Renjin
|
|
|
131
132
|
def eq(other_val)
|
|
132
133
|
(other_val == nil)? false : R.eval("identical(#{r},#{other_val.r})")
|
|
133
134
|
end
|
|
134
|
-
|
|
135
|
+
=begin
|
|
135
136
|
#----------------------------------------------------------------------------------------
|
|
136
137
|
#
|
|
137
138
|
#----------------------------------------------------------------------------------------
|
|
@@ -163,7 +164,7 @@ class Renjin
|
|
|
163
164
|
def as__character
|
|
164
165
|
R.as__character(self)
|
|
165
166
|
end
|
|
166
|
-
|
|
167
|
+
=end
|
|
167
168
|
#----------------------------------------------------------------------------------------
|
|
168
169
|
#
|
|
169
170
|
#----------------------------------------------------------------------------------------
|
|
@@ -171,19 +172,20 @@ class Renjin
|
|
|
171
172
|
def as__mdarray
|
|
172
173
|
|
|
173
174
|
if (@mdarray)
|
|
174
|
-
elsif (@sexp.
|
|
175
|
+
elsif (@sexp.java_kind_of? Java::RbScicom::MDDoubleVector)
|
|
175
176
|
@mdarray = MDArray.build_from_nc_array(:double, @sexp.array)
|
|
176
|
-
elsif (@sexp.
|
|
177
|
+
elsif (@sexp.java_kind_of? Java::OrgRenjinSexp::DoubleArrayVector)
|
|
177
178
|
@mdarray = MDArray.from_jstorage("double", [@sexp.length()], @sexp.toDoubleArrayUnsafe())
|
|
178
|
-
elsif (
|
|
179
|
+
elsif (sexp.instance_of? Java::OrgRenjinSexp::LongArrayVector)
|
|
180
|
+
@mdarray = MDArray.from_jstorage("long", [@sexp.length()], @sexp.values)
|
|
181
|
+
elsif (@sexp.java_kind_of? Java::OrgRenjinSexp::IntArrayVector)
|
|
179
182
|
@mdarray = MDArray.from_jstorage("int", [@sexp.length()], @sexp.toIntArrayUnsafe())
|
|
180
|
-
elsif (@sexp.
|
|
183
|
+
elsif (@sexp.java_kind_of? Java::OrgRenjinSexp::StringArrayVector)
|
|
181
184
|
@mdarray = MDArray.from_jstorage("string", [@sexp.length()], @sexp.values)
|
|
182
|
-
elsif (@sexp.
|
|
185
|
+
elsif (@sexp.java_kind_of? Java::OrgRenjinSexp::LogicalArrayVector)
|
|
183
186
|
@mdarray = MDArray.from_jstorage("int", [@sexp.length()], @sexp.values)
|
|
184
187
|
else
|
|
185
|
-
p "sexp type needs to be specialized"
|
|
186
|
-
p @sexp
|
|
188
|
+
p "as__mdarray: sexp type needs to be specialized: #{@sexp}"
|
|
187
189
|
@mdarray = Renjin::RubySexp.new(@sexp)
|
|
188
190
|
end
|
|
189
191
|
|
|
@@ -258,7 +260,6 @@ class Renjin
|
|
|
258
260
|
other_vec = R.d(other_vec)
|
|
259
261
|
end
|
|
260
262
|
R.eval("#{r} + #{other_vec.r}")
|
|
261
|
-
|
|
262
263
|
end
|
|
263
264
|
|
|
264
265
|
#----------------------------------------------------------------------------------------
|
|
@@ -385,11 +386,11 @@ class Renjin
|
|
|
385
386
|
#----------------------------------------------------------------------------------------
|
|
386
387
|
#
|
|
387
388
|
#----------------------------------------------------------------------------------------
|
|
388
|
-
|
|
389
|
+
=begin
|
|
389
390
|
def !
|
|
390
391
|
R.eval("!#{r}")
|
|
391
392
|
end
|
|
392
|
-
|
|
393
|
+
=end
|
|
393
394
|
#----------------------------------------------------------------------------------------
|
|
394
395
|
#
|
|
395
396
|
#----------------------------------------------------------------------------------------
|