rust 0.7 → 0.11
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/bin/ruby-rust +3 -0
- data/lib/{rust-csv.rb → rust/core/csv.rb} +23 -1
- data/lib/rust/core/rust.rb +221 -0
- data/lib/rust/core/types/all.rb +4 -0
- data/lib/{rust-core.rb → rust/core/types/dataframe.rb} +159 -331
- data/lib/rust/core/types/datatype.rb +195 -0
- data/lib/rust/core/types/factor.rb +158 -0
- data/lib/rust/core/types/language.rb +199 -0
- data/lib/rust/core/types/list.rb +97 -0
- data/lib/rust/core/types/matrix.rb +155 -0
- data/lib/rust/core/types/s4class.rb +78 -0
- data/lib/rust/core/types/utils.rb +122 -0
- data/lib/rust/core.rb +7 -0
- data/lib/rust/external/robustbase.rb +44 -0
- data/lib/rust/models/all.rb +4 -0
- data/lib/rust/models/anova.rb +77 -0
- data/lib/rust/models/regression.rb +258 -0
- data/lib/rust/plots/all.rb +4 -0
- data/lib/rust/plots/basic-plots.rb +143 -0
- data/lib/{rust-plots.rb → rust/plots/core.rb} +89 -167
- data/lib/rust/plots/distribution-plots.rb +75 -0
- data/lib/rust/stats/all.rb +4 -0
- data/lib/{rust-basics.rb → rust/stats/correlation.rb} +45 -2
- data/lib/{rust-descriptive.rb → rust/stats/descriptive.rb} +52 -3
- data/lib/{rust-effsize.rb → rust/stats/effsize.rb} +28 -13
- data/lib/{rust-probabilities.rb → rust/stats/probabilities.rb} +142 -34
- data/lib/{rust-tests.rb → rust/stats/tests.rb} +178 -92
- data/lib/rust.rb +4 -9
- metadata +32 -13
- data/lib/rust-calls.rb +0 -80
@@ -1,6 +1,13 @@
|
|
1
|
-
require_relative '
|
1
|
+
require_relative '../core'
|
2
|
+
|
3
|
+
##
|
4
|
+
# Module with utilities for running statistical hypothesis tests.
|
2
5
|
|
3
6
|
module Rust::StatisticalTests
|
7
|
+
|
8
|
+
##
|
9
|
+
# Represents the result of a statistical hypothesis test.
|
10
|
+
|
4
11
|
class Result
|
5
12
|
attr_accessor :name
|
6
13
|
attr_accessor :statistics
|
@@ -21,16 +28,28 @@ module Rust::StatisticalTests
|
|
21
28
|
@statistics[name.to_sym] = value
|
22
29
|
end
|
23
30
|
|
31
|
+
##
|
32
|
+
# If a hypothesis is available, returns the adjusted p-value with respect to all the other results obtained for
|
33
|
+
# the same hypothesis. Otherwise, simply returns the p-value for this result.
|
34
|
+
# The +method+ for adjustment can be optionally specified (Bonferroni, by default).
|
35
|
+
|
24
36
|
def adjusted_pvalue(method='bonferroni')
|
25
|
-
return
|
37
|
+
return @pvalue unless @hypothesis
|
26
38
|
@hypothesis.adjusted_pvalue_for(self, method)
|
27
39
|
end
|
28
40
|
|
41
|
+
##
|
42
|
+
# Sets the underlying hypothesis for the test. The p-values of the results belonging to the same hypothesis can
|
43
|
+
# be adjusted through the adjusted_pvalue method.
|
44
|
+
|
29
45
|
def hypothesis=(value)
|
30
46
|
@hypothesis = value
|
31
47
|
@hypothesis.add(self)
|
32
48
|
end
|
33
49
|
|
50
|
+
##
|
51
|
+
# Returns true if the results are significant according to the specified alpha.
|
52
|
+
|
34
53
|
def significant
|
35
54
|
pvalue < alpha
|
36
55
|
end
|
@@ -43,7 +62,13 @@ module Rust::StatisticalTests
|
|
43
62
|
end
|
44
63
|
end
|
45
64
|
|
46
|
-
|
65
|
+
##
|
66
|
+
# Represents a hypothesis behind one or more results.
|
67
|
+
|
68
|
+
class Hypothesis
|
69
|
+
##
|
70
|
+
# Returns the hypothesis with the given +title_or_instance+ as title (if String).
|
71
|
+
|
47
72
|
def self.find(title_or_instance)
|
48
73
|
return Hypothesis.new(nil) if title_or_instance == nil
|
49
74
|
|
@@ -63,18 +88,28 @@ module Rust::StatisticalTests
|
|
63
88
|
attr_reader :results
|
64
89
|
attr_reader :title
|
65
90
|
|
91
|
+
##
|
92
|
+
# Creates a new hypothesis with a given +title+.
|
93
|
+
|
66
94
|
def initialize(title)
|
67
95
|
@title = title
|
68
96
|
@results = []
|
69
97
|
end
|
70
98
|
|
99
|
+
##
|
100
|
+
# Registers a +result+ for this hypothesis.
|
101
|
+
|
71
102
|
def add(result)
|
72
103
|
@results << result
|
73
104
|
end
|
74
105
|
|
75
|
-
|
106
|
+
##
|
107
|
+
# Returns the adjusted p-value for a specific +result+ with respect to all the other results obtained under this
|
108
|
+
# same hypothesis, using the specified +method+.
|
109
|
+
|
110
|
+
def adjusted_pvalue_for(result, method)
|
76
111
|
p_values = @results.map { |r| r.pvalue }
|
77
|
-
index = @results.index(
|
112
|
+
index = @results.index(result)
|
78
113
|
|
79
114
|
adjusted_pvalues = Rust::StatisticalTests::PValueAdjustment.method(method).adjust(*p_values)
|
80
115
|
|
@@ -85,85 +120,17 @@ module Rust::StatisticalTests
|
|
85
120
|
end
|
86
121
|
end
|
87
122
|
end
|
88
|
-
end
|
89
|
-
|
90
|
-
module Rust::StatisticalTests::PValueAdjustment
|
91
|
-
def self.method(name)
|
92
|
-
name = name.to_s
|
93
|
-
case name.downcase
|
94
|
-
when "bonferroni", "b"
|
95
|
-
return Bonferroni
|
96
|
-
when "holm", "h"
|
97
|
-
return Holm
|
98
|
-
when "hochberg"
|
99
|
-
return Hochberg
|
100
|
-
when "hommel"
|
101
|
-
return Hommel
|
102
|
-
when "benjaminihochberg", "bh"
|
103
|
-
return BenjaminiHochberg
|
104
|
-
when "benjaminiyekutieli", "by"
|
105
|
-
return BenjaminiYekutieli
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
class Bonferroni
|
110
|
-
def self.adjust(*p_values)
|
111
|
-
Rust.exclusive do
|
112
|
-
Rust['adjustment.p'] = p_values
|
113
|
-
return Rust._pull("p.adjust(adjustment.p, method=\"bonferroni\")")
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|
117
123
|
|
118
|
-
|
119
|
-
|
120
|
-
Rust.exclusive do
|
121
|
-
Rust['adjustment.p'] = p_values
|
122
|
-
return Rust._pull("p.adjust(adjustment.p, method=\"holm\")")
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
class Hochberg
|
128
|
-
def self.adjust(*p_values)
|
129
|
-
Rust.exclusive do
|
130
|
-
Rust['adjustment.p'] = p_values
|
131
|
-
return Rust._pull("p.adjust(adjustment.p, method=\"hochberg\")")
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
class Hommel
|
137
|
-
def self.adjust(*p_values)
|
138
|
-
Rust.exclusive do
|
139
|
-
Rust['adjustment.p'] = p_values
|
140
|
-
return Rust._pull("p.adjust(adjustment.p, method=\"hommel\")")
|
141
|
-
end
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
class BenjaminiHochberg
|
146
|
-
def self.adjust(*p_values)
|
147
|
-
Rust.exclusive do
|
148
|
-
Rust['adjustment.p'] = p_values
|
149
|
-
return Rust._pull("p.adjust(adjustment.p, method=\"BH\")")
|
150
|
-
end
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
class BenjaminiYekutieli
|
155
|
-
def self.adjust(*p_values)
|
156
|
-
Rust.exclusive do
|
157
|
-
Rust['adjustment.p'] = p_values
|
158
|
-
return Rust._pull("p.adjust(adjustment.p, method=\"BY\")")
|
159
|
-
end
|
160
|
-
end
|
161
|
-
end
|
162
|
-
end
|
124
|
+
##
|
125
|
+
# Class with utilities for running Wilcoxon Signed-Rank test and Ranked-Sum test (a.k.a. Mann-Whitney U test).
|
163
126
|
|
164
|
-
|
165
|
-
|
166
|
-
|
127
|
+
class Wilcoxon
|
128
|
+
|
129
|
+
##
|
130
|
+
# Runs a Wilxoson Signed-Rank test for +d1+ and +d2+, with a given +alpha+ (0.05, by default).
|
131
|
+
# +options+ can be specified and directly passed to the R function.
|
132
|
+
|
133
|
+
def self.paired(d1, d2, alpha = 0.05, **options)
|
167
134
|
raise TypeError, "Expecting Array of numerics" if !d1.is_a?(Array) || !d1.all? { |e| e.is_a?(Numeric) }
|
168
135
|
raise TypeError, "Expecting Array of numerics" if !d2.is_a?(Array) || !d2.all? { |e| e.is_a?(Numeric) }
|
169
136
|
raise "The two distributions have different size" if d1.size != d2.size
|
@@ -185,7 +152,11 @@ module Rust::StatisticalTests::Wilcoxon
|
|
185
152
|
end
|
186
153
|
end
|
187
154
|
|
188
|
-
|
155
|
+
##
|
156
|
+
# Runs a Wilxoson Ranked-Sum (a.k.a. Mann-Whitney U) test for +d1+ and +d2+, with a given +alpha+ (0.05, by default).
|
157
|
+
# +options+ can be specified and directly passed to the R function.
|
158
|
+
|
159
|
+
def self.unpaired(d1, d2, alpha = 0.05, **options)
|
189
160
|
raise TypeError, "Expecting Array of numerics" if !d1.is_a?(Array) || !d1.all? { |e| e.is_a?(Numeric) }
|
190
161
|
raise TypeError, "Expecting Array of numerics" if !d2.is_a?(Array) || !d2.all? { |e| e.is_a?(Numeric) }
|
191
162
|
|
@@ -206,11 +177,17 @@ module Rust::StatisticalTests::Wilcoxon
|
|
206
177
|
end
|
207
178
|
end
|
208
179
|
end
|
209
|
-
|
180
|
+
|
181
|
+
##
|
182
|
+
# Class with utilities for running the T test.
|
210
183
|
|
211
|
-
|
212
|
-
|
213
|
-
|
184
|
+
class T
|
185
|
+
|
186
|
+
##
|
187
|
+
# Runs a paired T test for +d1+ and +d2+, with a given +alpha+ (0.05, by default).
|
188
|
+
# +options+ can be specified and directly passed to the R function.
|
189
|
+
|
190
|
+
def self.paired(d1, d2, alpha = 0.05, **options)
|
214
191
|
raise TypeError, "Expecting Array of numerics" if !d1.is_a?(Array) || !d1.all? { |e| e.is_a?(Numeric) }
|
215
192
|
raise TypeError, "Expecting Array of numerics" if !d2.is_a?(Array) || !d2.all? { |e| e.is_a?(Numeric) }
|
216
193
|
raise "The two distributions have different size" if d1.size != d2.size
|
@@ -232,7 +209,11 @@ module Rust::StatisticalTests::T
|
|
232
209
|
end
|
233
210
|
end
|
234
211
|
|
235
|
-
|
212
|
+
##
|
213
|
+
# Runs an unpaired T test for +d1+ and +d2+, with a given +alpha+ (0.05, by default).
|
214
|
+
# +options+ can be specified and directly passed to the R function.
|
215
|
+
|
216
|
+
def self.unpaired(d1, d2, alpha = 0.05, **options)
|
236
217
|
raise TypeError, "Expecting Array of numerics" if !d1.is_a?(Array) || !d1.all? { |e| e.is_a?(Numeric) }
|
237
218
|
raise TypeError, "Expecting Array of numerics" if !d2.is_a?(Array) || !d2.all? { |e| e.is_a?(Numeric) }
|
238
219
|
|
@@ -253,11 +234,17 @@ module Rust::StatisticalTests::T
|
|
253
234
|
end
|
254
235
|
end
|
255
236
|
end
|
256
|
-
end
|
257
237
|
|
258
|
-
|
259
|
-
|
260
|
-
|
238
|
+
##
|
239
|
+
# Utilities for the Shapiro normality test.
|
240
|
+
|
241
|
+
class Shapiro
|
242
|
+
|
243
|
+
##
|
244
|
+
# Runs the Shapiro normality test for +vector+ and a given +alpha+ (0.05, by default).
|
245
|
+
# +options+ can be specified and directly passed to the R function.
|
246
|
+
|
247
|
+
def self.compute(vector, alpha = 0.05, **options)
|
261
248
|
raise TypeError, "Expecting Array of numerics" if !vector.is_a?(Array) || !vector.all? { |e| e.is_a?(Numeric) }
|
262
249
|
Rust.exclusive do
|
263
250
|
Rust['shapiro.v'] = vector
|
@@ -275,6 +262,105 @@ module Rust::StatisticalTests::Shapiro
|
|
275
262
|
end
|
276
263
|
end
|
277
264
|
end
|
265
|
+
|
266
|
+
##
|
267
|
+
# Module with utilities for adjusting the p-values.
|
268
|
+
|
269
|
+
module PValueAdjustment
|
270
|
+
|
271
|
+
##
|
272
|
+
# Returns the Ruby class given the R name of the p-value adjustment method.
|
273
|
+
|
274
|
+
def self.method(name)
|
275
|
+
name = name.to_s
|
276
|
+
case name.downcase
|
277
|
+
when "bonferroni", "b"
|
278
|
+
return Bonferroni
|
279
|
+
when "holm", "h"
|
280
|
+
return Holm
|
281
|
+
when "hochberg"
|
282
|
+
return Hochberg
|
283
|
+
when "hommel"
|
284
|
+
return Hommel
|
285
|
+
when "benjaminihochberg", "bh"
|
286
|
+
return BenjaminiHochberg
|
287
|
+
when "benjaminiyekutieli", "by"
|
288
|
+
return BenjaminiYekutieli
|
289
|
+
end
|
290
|
+
end
|
291
|
+
|
292
|
+
##
|
293
|
+
# Bonferroni p-value adjustment method.
|
294
|
+
|
295
|
+
class Bonferroni
|
296
|
+
def self.adjust(*p_values)
|
297
|
+
Rust.exclusive do
|
298
|
+
Rust['adjustment.p'] = p_values
|
299
|
+
return Rust._pull("p.adjust(adjustment.p, method=\"bonferroni\")")
|
300
|
+
end
|
301
|
+
end
|
302
|
+
end
|
303
|
+
|
304
|
+
##
|
305
|
+
# Holm p-value adjustment method.
|
306
|
+
|
307
|
+
class Holm
|
308
|
+
def self.adjust(*p_values)
|
309
|
+
Rust.exclusive do
|
310
|
+
Rust['adjustment.p'] = p_values
|
311
|
+
return Rust._pull("p.adjust(adjustment.p, method=\"holm\")")
|
312
|
+
end
|
313
|
+
end
|
314
|
+
end
|
315
|
+
|
316
|
+
##
|
317
|
+
# Hochberg p-value adjustment method.
|
318
|
+
|
319
|
+
class Hochberg
|
320
|
+
def self.adjust(*p_values)
|
321
|
+
Rust.exclusive do
|
322
|
+
Rust['adjustment.p'] = p_values
|
323
|
+
return Rust._pull("p.adjust(adjustment.p, method=\"hochberg\")")
|
324
|
+
end
|
325
|
+
end
|
326
|
+
end
|
327
|
+
|
328
|
+
##
|
329
|
+
# Hommel p-value adjustment method.
|
330
|
+
|
331
|
+
class Hommel
|
332
|
+
def self.adjust(*p_values)
|
333
|
+
Rust.exclusive do
|
334
|
+
Rust['adjustment.p'] = p_values
|
335
|
+
return Rust._pull("p.adjust(adjustment.p, method=\"hommel\")")
|
336
|
+
end
|
337
|
+
end
|
338
|
+
end
|
339
|
+
|
340
|
+
##
|
341
|
+
# Benjamini-Hochberg p-value adjustment method.
|
342
|
+
|
343
|
+
class BenjaminiHochberg
|
344
|
+
def self.adjust(*p_values)
|
345
|
+
Rust.exclusive do
|
346
|
+
Rust['adjustment.p'] = p_values
|
347
|
+
return Rust._pull("p.adjust(adjustment.p, method=\"BH\")")
|
348
|
+
end
|
349
|
+
end
|
350
|
+
end
|
351
|
+
|
352
|
+
##
|
353
|
+
# Benjamini-Yekutieli p-value adjustment method.
|
354
|
+
|
355
|
+
class BenjaminiYekutieli
|
356
|
+
def self.adjust(*p_values)
|
357
|
+
Rust.exclusive do
|
358
|
+
Rust['adjustment.p'] = p_values
|
359
|
+
return Rust._pull("p.adjust(adjustment.p, method=\"BY\")")
|
360
|
+
end
|
361
|
+
end
|
362
|
+
end
|
363
|
+
end
|
278
364
|
end
|
279
365
|
|
280
366
|
module Rust::RBindings
|
data/lib/rust.rb
CHANGED
@@ -1,9 +1,4 @@
|
|
1
|
-
require_relative 'rust
|
2
|
-
require_relative 'rust
|
3
|
-
require_relative 'rust
|
4
|
-
require_relative 'rust
|
5
|
-
require_relative 'rust-effsize'
|
6
|
-
require_relative 'rust-descriptive'
|
7
|
-
require_relative 'rust-plots'
|
8
|
-
require_relative 'rust-calls'
|
9
|
-
require_relative 'rust-probabilities'
|
1
|
+
require_relative 'rust/core'
|
2
|
+
require_relative 'rust/models/all'
|
3
|
+
require_relative 'rust/plots/all'
|
4
|
+
require_relative 'rust/stats/all'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rust
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.11'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Simone Scalabrino
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rinruby
|
@@ -52,20 +52,39 @@ dependencies:
|
|
52
52
|
version: 1.1.2
|
53
53
|
description: Ruby advanced statistical library based on RinRuby
|
54
54
|
email: s.scalabrino9@gmail.com
|
55
|
-
executables:
|
55
|
+
executables:
|
56
|
+
- ruby-rust
|
56
57
|
extensions: []
|
57
58
|
extra_rdoc_files: []
|
58
59
|
files:
|
59
|
-
-
|
60
|
-
- lib/rust-calls.rb
|
61
|
-
- lib/rust-core.rb
|
62
|
-
- lib/rust-csv.rb
|
63
|
-
- lib/rust-descriptive.rb
|
64
|
-
- lib/rust-effsize.rb
|
65
|
-
- lib/rust-plots.rb
|
66
|
-
- lib/rust-probabilities.rb
|
67
|
-
- lib/rust-tests.rb
|
60
|
+
- bin/ruby-rust
|
68
61
|
- lib/rust.rb
|
62
|
+
- lib/rust/core.rb
|
63
|
+
- lib/rust/core/csv.rb
|
64
|
+
- lib/rust/core/rust.rb
|
65
|
+
- lib/rust/core/types/all.rb
|
66
|
+
- lib/rust/core/types/dataframe.rb
|
67
|
+
- lib/rust/core/types/datatype.rb
|
68
|
+
- lib/rust/core/types/factor.rb
|
69
|
+
- lib/rust/core/types/language.rb
|
70
|
+
- lib/rust/core/types/list.rb
|
71
|
+
- lib/rust/core/types/matrix.rb
|
72
|
+
- lib/rust/core/types/s4class.rb
|
73
|
+
- lib/rust/core/types/utils.rb
|
74
|
+
- lib/rust/external/robustbase.rb
|
75
|
+
- lib/rust/models/all.rb
|
76
|
+
- lib/rust/models/anova.rb
|
77
|
+
- lib/rust/models/regression.rb
|
78
|
+
- lib/rust/plots/all.rb
|
79
|
+
- lib/rust/plots/basic-plots.rb
|
80
|
+
- lib/rust/plots/core.rb
|
81
|
+
- lib/rust/plots/distribution-plots.rb
|
82
|
+
- lib/rust/stats/all.rb
|
83
|
+
- lib/rust/stats/correlation.rb
|
84
|
+
- lib/rust/stats/descriptive.rb
|
85
|
+
- lib/rust/stats/effsize.rb
|
86
|
+
- lib/rust/stats/probabilities.rb
|
87
|
+
- lib/rust/stats/tests.rb
|
69
88
|
homepage: https://github.com/intersimone999/ruby-rust
|
70
89
|
licenses:
|
71
90
|
- GPL-3.0-only
|
@@ -85,7 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
85
104
|
- !ruby/object:Gem::Version
|
86
105
|
version: '0'
|
87
106
|
requirements: []
|
88
|
-
rubygems_version: 3.
|
107
|
+
rubygems_version: 3.3.15
|
89
108
|
signing_key:
|
90
109
|
specification_version: 4
|
91
110
|
summary: Ruby advanced statistical library
|
data/lib/rust-calls.rb
DELETED
@@ -1,80 +0,0 @@
|
|
1
|
-
require_relative 'rust-core'
|
2
|
-
|
3
|
-
module Rust
|
4
|
-
class Function
|
5
|
-
attr_reader :name
|
6
|
-
attr_reader :arguments
|
7
|
-
attr_reader :options
|
8
|
-
|
9
|
-
def initialize(name)
|
10
|
-
@function = name
|
11
|
-
@arguments = Arguments.new
|
12
|
-
@options = Options.new
|
13
|
-
end
|
14
|
-
|
15
|
-
def options=(options)
|
16
|
-
raise TypeError, "Expected Options" unless options.is_a?(Options)
|
17
|
-
|
18
|
-
@options = options
|
19
|
-
end
|
20
|
-
|
21
|
-
def arguments=(arguments)
|
22
|
-
raise TypeError, "Expected Arguments" unless options.is_a?(Arguments)
|
23
|
-
|
24
|
-
@arguments = arguments
|
25
|
-
end
|
26
|
-
|
27
|
-
def to_R
|
28
|
-
params = [@arguments.to_R, @options.to_R].select { |v| v != "" }.join(",")
|
29
|
-
return "#@function(#{params})"
|
30
|
-
end
|
31
|
-
|
32
|
-
def call
|
33
|
-
Rust._eval(self.to_R)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
class SimpleFormula
|
38
|
-
def initialize(dependent, independent)
|
39
|
-
@dependent = dependent
|
40
|
-
@independent = independent
|
41
|
-
end
|
42
|
-
|
43
|
-
def to_R
|
44
|
-
return "#@dependent ~ #@independent"
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
class Variable
|
49
|
-
def initialize(name)
|
50
|
-
@name = name
|
51
|
-
end
|
52
|
-
|
53
|
-
def to_R
|
54
|
-
@name
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
class Arguments < Array
|
59
|
-
def to_R
|
60
|
-
return self.map { |v| v.to_R }.join(", ")
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
class Options < Hash
|
65
|
-
def to_R
|
66
|
-
return self.map { |k, v| "#{k}=#{v.to_R}" }.join(", ")
|
67
|
-
end
|
68
|
-
|
69
|
-
def self.from_hash(hash)
|
70
|
-
options = Options.new
|
71
|
-
hash.each do |key, value|
|
72
|
-
options[key.to_s] = value
|
73
|
-
end
|
74
|
-
return options
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
module Rust::RBindings
|
80
|
-
end
|