scicom 0.3.0-java → 0.4.0-java
Sign up to get free protection for your applications and to get access to all the features.
- 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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3ffc1bffa5d865e5df2c6843e4b016b34f283209
|
4
|
+
data.tar.gz: 362146cc4e463467e0d90c1758255c0bc97b9f9a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f8d3a2b9b0d447b888b3cef294b21de6f085a5f199f38c7a295234b4eb02c8c32abcbb1ba6d42cbdac65f6b79e630ed7051836b64008f75779296378c3d63874
|
7
|
+
data.tar.gz: 1b7717cec680c29aa20579f7d4d62a37e3965272bcaadbf99d8c6563e833b873a6141b739283186c286e45127fcceb3c4a6ac98308f1063d7bccf111f7cdacde
|
data/README.md
CHANGED
@@ -1,74 +1,258 @@
|
|
1
|
-
|
2
|
-
============
|
1
|
+
## SciCom with Standard R Interface
|
3
2
|
|
4
|
-
SciCom
|
5
|
-
|
3
|
+
SciCom allows R programmers to use R commands inside a Ruby script in
|
4
|
+
a way similar to RinRuby by calling method eval and passing to it an R
|
5
|
+
script:
|
6
6
|
|
7
|
-
R
|
8
|
-
|
7
|
+
# Basic integration with R can always be done by calling eval and passing it a valid
|
8
|
+
# R expression.
|
9
|
+
> R.eval("r.i = 10L")
|
10
|
+
> R.eval("print(r.i)")
|
9
11
|
|
10
|
-
|
11
|
-
facto standard for analysts, statisticians, and scientists. Today, a wide range of
|
12
|
-
enterprises – from pharmaceuticals to insurance – depend on R for key business uses. Renjin
|
13
|
-
is a new implementation of the R language and environment for the Java Virtual Machine (JVM),
|
14
|
-
whose goal is to enable transparent analysis of big data sets and seamless integration with
|
15
|
-
other enterprise systems such as databases and application servers.
|
12
|
+
[1] 10
|
16
13
|
|
17
|
-
|
18
|
-
|
19
|
-
dependencies.
|
14
|
+
> R.eval("vec = c(10, 20, 30, 40, 50)")
|
15
|
+
> R.eval("print(vec)")
|
20
16
|
|
21
|
-
|
22
|
-
-----------------
|
17
|
+
[1] 10 20 30 40 50
|
23
18
|
|
24
|
-
|
25
|
-
SciCom is similar to other solutions such as RinRuby, Rpy2, PipeR, etc. However, since
|
26
|
-
SciCom and Renjin both target the JVM there is no need to integrate both solutions and
|
27
|
-
there is no need to send data between Ruby and R, as it all resides in the same JVM.
|
28
|
-
Further, installation of SciCom does not require the installation of GNU R; Renjin is the
|
29
|
-
interpreter and comes with SciCom. Finally, although SciCom provides a basic interface to
|
30
|
-
Renjin similar to RinRuby, a much tighter integration is also possible.
|
19
|
+
> R.eval("print(vec[1])")
|
31
20
|
|
32
|
-
|
33
|
-
------------------------------
|
21
|
+
[1] 10
|
34
22
|
|
35
|
-
|
23
|
+
Programmers can also use here docs to integrate an R script inside a
|
24
|
+
Ruby script. The next example show a model for predicting baseball
|
25
|
+
wins based on runs allowed and runs scored. The data comes from
|
26
|
+
Baseball-Reference.com.
|
36
27
|
|
37
|
-
|
38
|
-
developers are actually working on a new version on which loading of libraries will be
|
39
|
-
possible.
|
40
|
-
+ Renjin does not implement any of the graphical libaries such as plot or ggplot. We
|
41
|
-
hope that this limitation will be solved not by implementing those libraries but by the
|
42
|
-
use of Ruby libraries from SciRuby such as NyaPlot (https://github.com/domitry/nyaplot)
|
43
|
-
or daru (https://github.com/v0dro/daru).
|
28
|
+
R.eval <<EOF
|
44
29
|
|
45
|
-
|
46
|
-
|
30
|
+
# This dataset comes from Baseball-Reference.com.
|
31
|
+
baseball = read.csv("baseball.csv")
|
32
|
+
# str has a bug in Renjin
|
33
|
+
# str(data)
|
47
34
|
|
48
|
-
|
35
|
+
# Lets look at the data available for Momeyball.
|
36
|
+
moneyball = subset(baseball, Year < 2002)
|
49
37
|
|
38
|
+
# Let's see if we can predict the number of wins, by lookin at
|
39
|
+
# runs allowed (RA) and runs scored (RS). RD is the runs difference.
|
40
|
+
# We are making a linear model from predicting wins (W) based on RD
|
41
|
+
moneyball$RD = moneyball$RS - moneyball$RA
|
42
|
+
WinsReg = lm(W ~ RD, data=moneyball)
|
43
|
+
print(summary(WinsReg))
|
50
44
|
|
51
|
-
|
52
|
-
==================================
|
45
|
+
EOF
|
53
46
|
|
54
|
-
|
55
|
-
+ jruby –S gem install scicom
|
47
|
+
The output of the program above is:
|
56
48
|
|
57
|
-
|
58
|
-
|
49
|
+
Call:
|
50
|
+
lm(data = moneyball, formula = W ~ RD)
|
59
51
|
|
60
|
-
|
61
|
-
|
52
|
+
Residuals:
|
53
|
+
Min 1Q Median 3Q Max
|
54
|
+
-14,266 -2,651 0,123 2,936 11,657
|
62
55
|
|
63
|
-
|
64
|
-
|
65
|
-
|
56
|
+
Coefficients:
|
57
|
+
Estimate Std. Error t value Pr(>|t|)
|
58
|
+
(Intercept) 80,881 0,131 616,675 <0 ***
|
59
|
+
RD 0,106 0,001 81,554 <0 ***
|
60
|
+
---
|
61
|
+
Signif. codes: 0 '***' 0,001 '**' 0,01 '*' 0,05 '.' 0,1 ' ' 1
|
66
62
|
|
67
|
-
|
68
|
-
|
63
|
+
Residual standard error: 3,939 on 900 degrees of freedom
|
64
|
+
Multiple R-squared: 0,8808, Adjusted R-squared: 0,8807
|
65
|
+
F-statistic: 6.650,9926 on 1 and 900 DF, p-value: < 0
|
66
|
+
|
67
|
+
## The SciCom “language”
|
68
|
+
|
69
|
+
SciCom also allows for implementing R scripts in a “language” that is
|
70
|
+
just like Ruby, so that the developer does not need to know that she
|
71
|
+
is actually writing an R script. All R methods are accessible through
|
72
|
+
an R namespace.
|
73
|
+
|
74
|
+
The next script is the same baseball model done in R above using
|
75
|
+
SciCom ‘language’:
|
76
|
+
|
77
|
+
require ‘scicom’
|
78
|
+
# This dataset comes from Baseball-Reference.com.
|
79
|
+
baseball = R.read__csv("baseball.csv")
|
80
|
+
# Lets look at the data available for Momeyball.
|
81
|
+
moneyball = baseball.subset(baseball.Year < 2002)
|
82
|
+
|
83
|
+
# Let's see if we can predict the number of wins, by looking at
|
84
|
+
# runs allowed (RA) and runs scored (RS). RD is the runs difference.
|
85
|
+
# We are making a linear model for predicting wins (W) based on RD
|
86
|
+
moneyball.RD = moneyball.RS - moneyball.RA
|
87
|
+
wins_reg = R.lm("W ~ RD", data: moneyball)
|
88
|
+
wins_reg.summary.pp
|
89
|
+
|
90
|
+
We show bellow an example of calculating the correlation matrix
|
91
|
+
without using the build-in functions. First this is done in an R
|
92
|
+
script and then using SciCom:
|
93
|
+
|
94
|
+
# Create a matrix and give it rownames and colnames
|
95
|
+
set.seed(42)
|
96
|
+
Xij <- matrix(sample(seq(0, 9), 40, replace = TRUE), ncol = 4)
|
97
|
+
rownames(Xij) <- paste("S", seq(1, dim(Xij)[1]), sep = "")
|
98
|
+
colnames(Xij) <- paste("V", seq(1, dim(Xij)[2]), sep = "")
|
99
|
+
|
100
|
+
# find the means of the columns
|
101
|
+
n <- dim(Xij)[1]
|
102
|
+
one <- rep(1, n)
|
103
|
+
X.means <- t(one) %*% Xij/n
|
104
|
+
|
105
|
+
# find the covariance of the matrix
|
106
|
+
X.diff <- Xij - one %*% X.means
|
107
|
+
X.cov <- t(X.diff) %*% X.diff/(n - 1)
|
108
|
+
round(X.cov, 2)
|
109
|
+
|
110
|
+
# find the correlation
|
111
|
+
sdi <- diag(1/sqrt(diag(X.cov)))
|
112
|
+
rownames(sdi) <- colnames(sdi) <- colnames(X.cov)
|
113
|
+
round(sdi, 2)
|
114
|
+
X.cor <- sdi %*% X.cov %*% sdi
|
115
|
+
rownames(X.cor) <- colnames(X.cor) <- colnames(X.cov)
|
116
|
+
round(X.cor, 2)
|
117
|
+
|
118
|
+
Now the same code using SciCom
|
119
|
+
|
120
|
+
require ‘scicom’
|
121
|
+
# Create a matrix and give it rownames and colnames
|
122
|
+
R.set__seed(42)
|
123
|
+
R.seq(0,9).sample(40, replace: TRUE).matrix(ncol: 4)
|
124
|
+
.fassign(:rownames, R.paste("S", R.seq(1, xij.attr.dim[1]), sep: ""))
|
125
|
+
.fassign(:colnames, R.paste("V", R.seq(1, xij.attr.dim[2]), sep: ""))
|
126
|
+
|
127
|
+
# find the means of the columns
|
128
|
+
n = xij.dim[1]
|
129
|
+
one = R.rep(1, n)
|
130
|
+
x_means = one.t._ :*, xij/n
|
131
|
+
|
132
|
+
# find the covariance of the matrix
|
133
|
+
x_diff = xij - (one._ :*, x_means)
|
134
|
+
x_cov = (x_diff.t._ :*, x_diff/(n - 1)).round(2)
|
135
|
+
|
136
|
+
# find the correlation
|
137
|
+
sdi = (1 / x_cov.diag.sqrt).diag.round(2)
|
138
|
+
sdi.fassign(:rownames, x_cov.rownames)
|
139
|
+
sdi.fassign(:colnames, x_cov.colnames)
|
140
|
+
x_cor = ((sdi._ :*, x_cov)._ :*, sdi)
|
141
|
+
.round(2)
|
142
|
+
.fassign(:rownames, x_cov.rownames)
|
143
|
+
.fassign(:colnames, x_cov.colnames)
|
144
|
+
|
145
|
+
As another example, here is a SciCom script to print the number of
|
146
|
+
days for every month is 2005:
|
147
|
+
|
148
|
+
require ‘scicom’
|
149
|
+
everyday = R.seq(from: R.as__Date('2005-1-1'), to: R.as__Date('2005-12-31'), by: 'day')
|
150
|
+
cmonth = everyday.format('%b')
|
151
|
+
cmonth
|
152
|
+
.factor(levels: cmonth.unique, ordered: TRUE)
|
153
|
+
.table
|
154
|
+
.pp
|
155
|
+
|
156
|
+
As can be seen from these examples, R methods can be accessed through
|
157
|
+
the R namespace in SciCom, so, R method ‘seq’ is called in SciCom as
|
158
|
+
‘R.seq’. R methods that are applied on objects can be called in two
|
159
|
+
ways, either using the R namespace as in ‘R.factor’ or directly on the
|
160
|
+
object, as in this case we did ‘cmonth.factor’. This last example
|
161
|
+
shows how SciCom allows method chaining, which is not possible in an R
|
162
|
+
script.
|
163
|
+
|
164
|
+
## R Functions
|
165
|
+
|
166
|
+
SciCom allows programmers to access any R function in the R namespace. For instance, as shown
|
167
|
+
above, function _c_ in R can be access in SciCom by a call to R.c. As another example,
|
168
|
+
method _seq_ in R is accessed in SciCom by a call to R.seq.
|
169
|
+
|
170
|
+
Parameters can be passed to R functions normaly. For example, the code bellow creates a vector
|
171
|
+
with with doubles:
|
172
|
+
|
173
|
+
> vec = R.c(2.4, 5.55, 10, 18.27, 34.45)
|
174
|
+
> vec.pp
|
175
|
+
|
176
|
+
[1] 2,4 5,55 10 18,27 34,45
|
177
|
+
|
178
|
+
Ruby variable can also be passed as arguments to R methods:
|
179
|
+
|
180
|
+
> vec2 = R.c(vec, 3.5)
|
181
|
+
> vec2.pp
|
182
|
+
|
183
|
+
[1] 2,4 5,55 10 18,27 34,45 3,5
|
184
|
+
|
185
|
+
> dbl = 3.5
|
186
|
+
> vec3 = R.c(vec2, dbl)
|
187
|
+
> vec3.pp
|
188
|
+
|
189
|
+
[1] 2,4 5,55 10 18,27 34,45 3,5 5,75
|
190
|
+
|
191
|
+
More complex Ruby classes, such ar Ruby hashes, of course, cannot be passed as argument to R
|
192
|
+
methods. SciCom, in principle, should support every Ruby method that is available in
|
193
|
+
Renjin. Note that Renjin is still under development and not all methods and libraries are
|
194
|
+
available.
|
195
|
+
|
196
|
+
Some methods and variables in R have a '.' in their names. This is standard R notation;
|
197
|
+
however, '.' in Ruby is interpreted as a method call and thus cannot be part of a
|
198
|
+
variable name or function. In order to access names in R that have a '.' on them
|
199
|
+
in SciCom, the '.' is substituted by '__':
|
200
|
+
|
201
|
+
> # variable defined in R with a '.' in the name
|
202
|
+
> R.eval("r.d = 10.35")
|
203
|
+
> # access the variable 'r.d' in Ruby by using '__' notation
|
204
|
+
> R.r__d.pp
|
205
|
+
|
206
|
+
[1] 10,35
|
207
|
+
|
208
|
+
Accessing method _as.complex_ in R is also done by using '__' notation:
|
209
|
+
|
210
|
+
# acess R method 'as.complex' using 'as__complex' notation
|
211
|
+
> comp = R.as__complex(-1)
|
212
|
+
> p R.Re(comp).gz
|
213
|
+
|
214
|
+
-1.0
|
215
|
+
|
216
|
+
> p R.Im(comp).gz
|
217
|
+
|
218
|
+
0.0
|
219
|
+
|
220
|
+
> # now method 'is.complex'
|
221
|
+
> p R.is__complex(comp).gt
|
222
|
+
|
223
|
+
true
|
224
|
+
|
225
|
+
### Method Chaining
|
226
|
+
|
227
|
+
SciCom allows methods to be chained. The code above can be written as:
|
228
|
+
|
229
|
+
# prints the real part of a complex number by using method chaining
|
230
|
+
> R.as__complex(-1)
|
231
|
+
.Re
|
232
|
+
.pp
|
233
|
+
|
234
|
+
[1] -1
|
235
|
+
|
236
|
+
We will see more examples of method chaining later in this documentation.
|
237
|
+
In principle, we will try to use method chaining whenever possible, but
|
238
|
+
in some situations normal use of R methods through the 'R.' notation will
|
239
|
+
be used to remind the reader that this notation is also possible.
|
240
|
+
|
241
|
+
### Named Parameters
|
242
|
+
|
243
|
+
R allows the use of named parameters in function calls. SciCom also allows
|
244
|
+
for named parameters. Named parameters in SciCom require the use of
|
245
|
+
Ruby hashes in the normal Ruby way.
|
246
|
+
|
247
|
+
> # R code to create a complex number
|
248
|
+
> R.eval("comp = complex(real = 0, imaginary = 1)")
|
249
|
+
> R.eval("print(comp)")
|
250
|
+
|
251
|
+
[0.0+1.0i]
|
252
|
+
|
253
|
+
> # Same code as above in SciCom notation, with chaining
|
254
|
+
> R.complex(real: 0, imaginary: 1)
|
255
|
+
> .pp
|
256
|
+
|
257
|
+
[0.0+1.0i]
|
69
258
|
|
70
|
-
+ 30/Dec/2014: Version 0.2.3 - Integration with MDArray
|
71
|
-
+ 19/Nov/2014: Version 0.2.2 - Printing in Jirb
|
72
|
-
+ 17/Nov/2014: Version 0.2.1 - Added MDArray dependency
|
73
|
-
+ 17/Nov/2014: Version 0.2.0 - Most R functionality available to SciCom
|
74
|
-
+ 21/Jul/2014: Version 0.0.1 - Initial release
|
data/Rakefile
CHANGED
@@ -1,14 +1,67 @@
|
|
1
|
+
require 'rbconfig'
|
1
2
|
require 'rake/testtask'
|
2
|
-
|
3
|
+
require 'jars/installer'
|
4
|
+
require 'jars/classpath'
|
5
|
+
require 'rake/javaextensiontask'
|
6
|
+
|
7
|
+
require './version'
|
8
|
+
|
9
|
+
$env = `uname -o`.strip
|
10
|
+
$mdarray = `bundle show mdarray`.strip
|
11
|
+
# $mdarray_vendor = "#{$mdarray}/vendor/"
|
12
|
+
|
13
|
+
##########################################################################################
|
14
|
+
# Prepare environment to work inside Cygwin
|
15
|
+
##########################################################################################
|
16
|
+
|
17
|
+
if $env == 'Cygwin'
|
18
|
+
|
19
|
+
#---------------------------------------------------------------------------------------
|
20
|
+
# Return the cygpath (windows format) of a path in POSIX format, i.e., /home/...
|
21
|
+
#---------------------------------------------------------------------------------------
|
22
|
+
|
23
|
+
def set_path(path)
|
24
|
+
`cygpath -a -w #{path}`.tr("\n", "")
|
25
|
+
end
|
26
|
+
|
27
|
+
else
|
28
|
+
|
29
|
+
#---------------------------------------------------------------------------------------
|
30
|
+
# Return the given path. When not in cygwin then just use the given path
|
31
|
+
#---------------------------------------------------------------------------------------
|
32
|
+
|
33
|
+
def set_path(path)
|
34
|
+
path
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
##########################################################################################
|
39
|
+
|
40
|
+
# $mdarray_path = set_path($mdarray_vendor)
|
41
|
+
|
42
|
+
# p "#{$mdarray_path}"
|
43
|
+
# p Dir.entries("#{$mdarray_path}")
|
44
|
+
# p FileList["#{$mdarray_path}/*.jar"]
|
3
45
|
|
4
46
|
name = "#{$gem_name}-#{$version}.gem"
|
5
47
|
|
6
|
-
|
7
|
-
|
48
|
+
task :install_jars do
|
49
|
+
Jars::JarInstaller.new.vendor_jars
|
50
|
+
end
|
51
|
+
|
52
|
+
Rake::JavaExtensionTask.new("scicom") do |ext|
|
53
|
+
jruby_home = RbConfig::CONFIG['prefix']
|
54
|
+
# ext.ext_dir = 'ext/java'
|
55
|
+
# ext.lib_dir = 'lib/nokogiri'
|
56
|
+
# jars = ["#{jruby_home}/lib/jruby.jar"] + FileList['lib/*.jar']
|
57
|
+
# jars = FileList["#{$mdarray_path}/*.jar"]
|
58
|
+
jars = FileList['vendor/*.jar']
|
59
|
+
ext.classpath = jars.map { |x| File.expand_path x }.join ':'
|
60
|
+
# ext.debug = true if ENV['JAVA_DEBUG']
|
8
61
|
end
|
9
62
|
|
10
|
-
desc '
|
11
|
-
|
63
|
+
desc 'compile java files'
|
64
|
+
Rake::JavaExtensionTask.new("scicom")
|
12
65
|
|
13
66
|
desc 'Makes a Gem'
|
14
67
|
task :make_gem do
|
data/config.rb
CHANGED
@@ -1,5 +1,19 @@
|
|
1
1
|
require 'rbconfig'
|
2
|
+
require 'java'
|
3
|
+
|
4
|
+
#
|
5
|
+
# In principle should not be in this file. The right way of doing this is by executing
|
6
|
+
# bundler exec, but I don't know how to do this from inside emacs. So, should comment
|
7
|
+
# the next line before publishing the GEM. If not commented, this should be harmless
|
8
|
+
# anyway.
|
9
|
+
#
|
10
|
+
|
11
|
+
begin
|
12
|
+
require 'bundler/setup'
|
13
|
+
rescue LoadError
|
14
|
+
end
|
2
15
|
|
16
|
+
=begin
|
3
17
|
##########################################################################################
|
4
18
|
# Configuration. Remove setting before publishing Gem.
|
5
19
|
##########################################################################################
|
@@ -8,14 +22,15 @@ require 'rbconfig'
|
|
8
22
|
$DVLP = true
|
9
23
|
|
10
24
|
# Set to 'cygwin' when in cygwin
|
11
|
-
|
25
|
+
$ENV = 'cygwin'
|
12
26
|
|
13
27
|
# Set development dependency: those are gems that are also in development and thus not
|
14
28
|
# installed in the gem directory. Need a way of accessing them if we are in development
|
15
29
|
# otherwise gem install will install the dependency
|
16
30
|
if $DVLP
|
17
|
-
$DEPEND=["MDArray"]
|
31
|
+
$DEPEND=["SciCom", "MDArray"]
|
18
32
|
end
|
33
|
+
=end
|
19
34
|
|
20
35
|
##########################################################################################
|
21
36
|
|
@@ -36,6 +51,7 @@ end
|
|
36
51
|
else 'default'
|
37
52
|
end
|
38
53
|
|
54
|
+
=begin
|
39
55
|
#---------------------------------------------------------------------------------------
|
40
56
|
# Add path to load path
|
41
57
|
#---------------------------------------------------------------------------------------
|
@@ -77,6 +93,7 @@ else
|
|
77
93
|
end
|
78
94
|
|
79
95
|
end
|
96
|
+
=end
|
80
97
|
|
81
98
|
#---------------------------------------------------------------------------------------
|
82
99
|
# Set the project directories
|
@@ -124,6 +141,7 @@ class SciCom
|
|
124
141
|
|
125
142
|
end
|
126
143
|
|
144
|
+
=begin
|
127
145
|
#---------------------------------------------------------------------------------------
|
128
146
|
# Set dependencies
|
129
147
|
#---------------------------------------------------------------------------------------
|
@@ -166,5 +184,19 @@ if ($DVLP == true)
|
|
166
184
|
|
167
185
|
end
|
168
186
|
|
187
|
+
|
169
188
|
# Add cran directory to the $LOAD_PATH search path
|
170
189
|
mklib(SciCom.cran_dir, false)
|
190
|
+
=end
|
191
|
+
|
192
|
+
##########################################################################################
|
193
|
+
# Load necessary jar files
|
194
|
+
##########################################################################################
|
195
|
+
|
196
|
+
Dir["#{SciCom.vendor_dir}/*.jar"].each do |jar|
|
197
|
+
require jar
|
198
|
+
end
|
199
|
+
|
200
|
+
Dir["#{SciCom.target_dir}/*.jar"].each do |jar|
|
201
|
+
require jar
|
202
|
+
end
|