rust 0.3 → 0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 985f7e940ab123fa452dae63792bde90613b134176ff4eaf5b59a719dd8a1ed5
4
- data.tar.gz: bef0bb5028c99cb43c8e5453fdbbaf687bad65f8e6b54b06f949e5df6fb61bda
3
+ metadata.gz: ca9e5aaa6bcfff9d1b261c5a3ced5cf74b7731085b4b094dba55df72884aca9a
4
+ data.tar.gz: 8c90363b44a0c95abc9610fb78c3c632c6ae4265ad2260ff7e9740777245f63e
5
5
  SHA512:
6
- metadata.gz: 418181b9357665ecc654e9a765e24aa792d6287dd5998b1b1bd8f3278e6951d785fff8afe9594c6c95e1f7a384cb08f844939728b62a96ab416259de1c14512b
7
- data.tar.gz: 810f14821924bd1b0cebf4fbf9f52e510abc0e935be6cc2852294fd374d54411bcd2a1943f5b60d2ce93501abcaff9cac25dd458e1a8b354b665aab199705a4a
6
+ metadata.gz: 0ca17e2c0dda2188138f11e1ae4becaa8a5c4b0d2cc12273775b9ade1fefbc860f3ccee2251fbe353b9dbde55eded960e8cf26642af042070d979ed192b332e3
7
+ data.tar.gz: 28dacd36f814acf51d222c8e746f65b94ef53ab5f24902ba6f654b05267c926e8db03cca82a876ca1183f55293da96d60ec862c5bfa26f6abd430d1f5e998709
@@ -10,13 +10,14 @@ module Rust:: Correlation
10
10
  Rust['correlation.a'] = d1
11
11
  Rust['correlation.b'] = d2
12
12
 
13
- Rust._eval("correlation.result <- cor.test(correlation.a, correlation.b, method='p')")
13
+ _, warnings = Rust._eval("correlation.result <- cor.test(correlation.a, correlation.b, method='p')", true)
14
14
 
15
15
  result = Result.new
16
16
  result.name = "Pearson's product-moment correlation"
17
17
  result.statistics['t'] = Rust._pull('correlation.result$statistic')
18
18
  result.pvalue = Rust._pull('correlation.result$p.value')
19
19
  result.correlation = Rust._pull('correlation.result$estimate')
20
+ result.exact = !warnings.include?("Cannot compute exact p-value with ties")
20
21
 
21
22
  return result
22
23
  end
@@ -36,13 +37,14 @@ module Rust:: Correlation
36
37
  Rust['correlation.a'] = d1
37
38
  Rust['correlation.b'] = d2
38
39
 
39
- Rust._eval("correlation.result <- cor.test(correlation.a, correlation.b, method='s')")
40
+ _, warnings = Rust._eval("correlation.result <- cor.test(correlation.a, correlation.b, method='s')", true)
40
41
 
41
42
  result = Result.new
42
43
  result.name = "Spearman's rank correlation rho"
43
44
  result.statistics['S'] = Rust._pull('correlation.result$statistic')
44
45
  result.pvalue = Rust._pull('correlation.result$p.value')
45
46
  result.correlation = Rust._pull('correlation.result$estimate')
47
+ result.exact = !warnings.include?("Cannot compute exact p-value with ties")
46
48
 
47
49
  return result
48
50
  end
@@ -62,13 +64,14 @@ module Rust:: Correlation
62
64
  Rust['correlation.a'] = d1
63
65
  Rust['correlation.b'] = d2
64
66
 
65
- Rust._eval("correlation.result <- cor.test(correlation.a, correlation.b, method='p')")
67
+ _, warnings = Rust._eval("correlation.result <- cor.test(correlation.a, correlation.b, method='p')", true)
66
68
 
67
69
  result = Result.new
68
70
  result.name = "Kendall's rank correlation tau"
69
71
  result.statistics['T'] = Rust._pull('correlation.result$statistic')
70
72
  result.pvalue = Rust._pull('correlation.result$p.value')
71
73
  result.correlation = Rust._pull('correlation.result$estimate')
74
+ result.exact = !warnings.include?("Cannot compute exact p-value with ties")
72
75
 
73
76
  return result
74
77
  end
@@ -84,11 +87,13 @@ module Rust:: Correlation
84
87
  attr_accessor :statistics
85
88
  attr_accessor :pvalue
86
89
  attr_accessor :correlation
90
+ attr_accessor :exact
87
91
 
88
92
  alias :estimate :correlation
89
93
 
90
94
  def initialize
91
95
  @statistics = {}
96
+ @exact = true
92
97
  end
93
98
 
94
99
  def [](name)
@@ -101,6 +106,7 @@ module Rust:: Correlation
101
106
 
102
107
  def to_s
103
108
  return "#{name}. Correlation = #{correlation}, P-value = #{pvalue} " +
109
+ (!@exact ? "P-value is not exact. " : "") +
104
110
  "#{ statistics.map { |k, v| k.to_s + " -> " + v.to_s }.join(", ") }."
105
111
  end
106
112
  end
@@ -581,3 +581,7 @@ module Rust::RBindings
581
581
  Rust::DataFrame.new(*args)
582
582
  end
583
583
  end
584
+
585
+ def bind_r!
586
+ include Rust::RBindings
587
+ end
@@ -13,15 +13,17 @@ module Rust::Descriptive
13
13
  def standard_deviation(data)
14
14
  raise TypeError, "Expecting Array of numerics" if !data.is_a?(Array) || !data.all? { |e| e.is_a?(Numeric) }
15
15
 
16
- # TODO implement
16
+ return Math.sqrt(variance(data))
17
17
  end
18
18
  alias :sd :standard_deviation
19
19
  alias :stddev :standard_deviation
20
20
 
21
21
  def variance(data)
22
22
  raise TypeError, "Expecting Array of numerics" if !data.is_a?(Array) || !data.all? { |e| e.is_a?(Numeric) }
23
+ return Float::NAN if data.size < 2
23
24
 
24
- # TODO implement
25
+ mean = mean(data)
26
+ return data.map { |v| (v - mean) ** 2 }.sum.to_f / (data.size - 1)
25
27
  end
26
28
  alias :var :variance
27
29
 
@@ -39,6 +41,12 @@ module Rust::Descriptive
39
41
  end
40
42
  end
41
43
 
44
+ def sum(data)
45
+ raise TypeError, "Expecting Array of numerics" if !data.is_a?(Array) || !data.all? { |e| e.is_a?(Numeric) }
46
+
47
+ return data.sum
48
+ end
49
+
42
50
  def quantile(data, percentiles=[0.0, 0.25, 0.5, 0.75, 1.0])
43
51
  raise TypeError, "Expecting Array of numerics" if !data.is_a?(Array) || !data.all? { |e| e.is_a?(Numeric) }
44
52
  raise TypeError, "Expecting Array of numerics" if !percentiles.is_a?(Array) || !percentiles.all? { |e| e.is_a?(Numeric) }
@@ -4,8 +4,9 @@ require_relative 'rust-calls'
4
4
  module Rust::Plots
5
5
  class BasePlot
6
6
  def initialize
7
- @plugins = []
7
+ @renderables = []
8
8
  @options = Rust::Options.new
9
+ @override_options = true
9
10
  end
10
11
 
11
12
  def x_label(label)
@@ -36,7 +37,13 @@ module Rust::Plots
36
37
  @options['xaxt'] = 'n'
37
38
  @options['yaxt'] = 'n'
38
39
 
39
- self.plug(axis)
40
+ self._add_renderable(axis)
41
+
42
+ return self
43
+ end
44
+
45
+ def grid(grid)
46
+ self._add_renderable(grid)
40
47
 
41
48
  return self
42
49
  end
@@ -53,21 +60,25 @@ module Rust::Plots
53
60
  return self
54
61
  end
55
62
 
56
- def plug(plugin)
57
- raise TypeError, "Expected Plugin" unless plugin.is_a?(Plugin)
58
- @plugins << plugin
63
+ def _add_renderable(renderable)
64
+ raise TypeError, "Expected Renderable" unless renderable.is_a?(Renderable)
65
+ @renderables << renderable
59
66
 
60
67
  return self
61
68
  end
62
69
 
63
70
  def []=(option, value)
64
- @options[option] = value
71
+ @options[option.to_s] = value
72
+ end
73
+
74
+ def _do_not_override_options!
75
+ @override_options = false
65
76
  end
66
77
 
67
78
  def show()
68
79
  Rust.exclusive do
69
80
  self._show
70
- self._run_plugins
81
+ self._render_others
71
82
  end
72
83
 
73
84
  return self
@@ -82,7 +93,7 @@ module Rust::Plots
82
93
  Rust.exclusive do
83
94
  pdf_function.call
84
95
  self._show
85
- self._run_plugins
96
+ self._render_others
86
97
  Rust._eval("dev.off()")
87
98
  end
88
99
 
@@ -94,9 +105,9 @@ module Rust::Plots
94
105
  raise "You are trying to show a BasePlot"
95
106
  end
96
107
 
97
- def _run_plugins()
98
- @plugins.each do |plugin|
99
- plugin._run()
108
+ def _render_others()
109
+ @renderables.each do |renderable|
110
+ renderable._render()
100
111
  end
101
112
 
102
113
  return self
@@ -106,7 +117,7 @@ module Rust::Plots
106
117
  result = @options.clone
107
118
 
108
119
  options.each do |key, value|
109
- result[key] = value
120
+ result[key] = value if !result[key] || @override_options
110
121
  end
111
122
 
112
123
  result.select! { |k, v| v != nil }
@@ -221,7 +232,7 @@ module Rust::Plots
221
232
  end
222
233
  end
223
234
 
224
- class Plugin
235
+ class Renderable
225
236
  def initialize
226
237
  @options = Rust::Options.new
227
238
  end
@@ -233,12 +244,12 @@ module Rust::Plots
233
244
  end
234
245
 
235
246
  protected
236
- def _run()
237
- raise "You are trying to run an abstract Plugin"
247
+ def _render()
248
+ raise "You are trying to run an abstract Renderable"
238
249
  end
239
250
  end
240
251
 
241
- class Axis < Plugin
252
+ class Axis < Renderable
242
253
  BELOW = 1
243
254
  LEFT = 2
244
255
  ABOVE = 3
@@ -276,7 +287,7 @@ module Rust::Plots
276
287
  return self
277
288
  end
278
289
 
279
- def _run()
290
+ def _render()
280
291
  function = Rust::Function.new("axis")
281
292
  function.options = @options
282
293
 
@@ -286,7 +297,7 @@ module Rust::Plots
286
297
  end
287
298
  end
288
299
 
289
- class Grid < Plugin
300
+ class Grid < Renderable
290
301
  def initialize
291
302
  super()
292
303
 
@@ -330,7 +341,7 @@ module Rust::Plots
330
341
  return self
331
342
  end
332
343
 
333
- def _run()
344
+ def _render()
334
345
  function = Rust::Function.new("grid")
335
346
 
336
347
  function.arguments << @x
@@ -345,7 +356,30 @@ module Rust::Plots
345
356
  end
346
357
 
347
358
  module Rust::RBindings
348
- def plot(x, y)
349
- Rust::Plots::ScatterPlot.new(x, y).show
359
+ def plot(x, y=(1..x.size).to_a, **options)
360
+ result = Rust::Plots::ScatterPlot.new(x, y)
361
+
362
+ options.each do |k, v|
363
+ result[k] = v
364
+ end
365
+
366
+ result._do_not_override_options!
367
+
368
+ result.show
369
+ end
370
+
371
+ def boxplot(*args, **options)
372
+ result = Rust::Plots::BoxPlot.new
373
+ options.each do |k, v|
374
+ result[k] = v
375
+ end
376
+
377
+ result._do_not_override_options!
378
+
379
+ args.each do |s|
380
+ result.series(s)
381
+ end
382
+
383
+ result.show
350
384
  end
351
385
  end
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.3'
4
+ version: '0.4'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simone Scalabrino
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-13 00:00:00.000000000 Z
11
+ date: 2020-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rinruby