galaaz 0.4.9 → 0.4.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +798 -285
- data/blogs/galaaz_ggplot/galaaz_ggplot.Rmd +3 -12
- data/blogs/galaaz_ggplot/galaaz_ggplot.aux +5 -7
- data/blogs/galaaz_ggplot/galaaz_ggplot.html +69 -29
- data/blogs/galaaz_ggplot/galaaz_ggplot.pdf +0 -0
- data/blogs/galaaz_ggplot/galaaz_ggplot_files/figure-html/midwest_rb.png +0 -0
- data/blogs/galaaz_ggplot/galaaz_ggplot_files/figure-html/scatter_plot_rb.png +0 -0
- data/blogs/galaaz_ggplot/galaaz_ggplot_files/figure-latex/midwest_rb.pdf +0 -0
- data/blogs/galaaz_ggplot/galaaz_ggplot_files/figure-latex/scatter_plot_rb.pdf +0 -0
- data/blogs/galaaz_ggplot/midwest.Rmd +1 -9
- data/blogs/gknit/gknit.Rmd +37 -40
- data/blogs/gknit/gknit.html +32 -30
- data/blogs/gknit/gknit.md +36 -37
- data/blogs/gknit/gknit.pdf +0 -0
- data/blogs/gknit/gknit.tex +35 -37
- data/blogs/manual/manual.Rmd +548 -125
- data/blogs/manual/manual.html +509 -286
- data/blogs/manual/manual.md +798 -285
- data/blogs/manual/manual.pdf +0 -0
- data/blogs/manual/manual.tex +2816 -0
- data/blogs/manual/manual_files/figure-latex/diverging_bar.pdf +0 -0
- data/blogs/nse_dplyr/nse_dplyr.Rmd +240 -74
- data/blogs/nse_dplyr/nse_dplyr.html +191 -87
- data/blogs/nse_dplyr/nse_dplyr.md +361 -107
- data/blogs/nse_dplyr/nse_dplyr.pdf +0 -0
- data/blogs/nse_dplyr/nse_dplyr.tex +1373 -0
- data/blogs/ruby_plot/ruby_plot.Rmd +61 -81
- data/blogs/ruby_plot/ruby_plot.html +54 -57
- data/blogs/ruby_plot/ruby_plot.md +48 -67
- data/blogs/ruby_plot/ruby_plot.pdf +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-html/dose_len.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-html/facet_by_delivery.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-html/facet_by_dose.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-html/facets_by_delivery_color.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-html/facets_by_delivery_color2.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-html/facets_with_jitter.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-html/facets_with_points.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-html/final_box_plot.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-html/final_violin_plot.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-html/violin_with_jitter.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-latex/dose_len.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-latex/facet_by_delivery.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-latex/facet_by_dose.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-latex/facets_by_delivery_color.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-latex/facets_by_delivery_color2.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-latex/facets_with_decorations.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-latex/facets_with_jitter.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-latex/facets_with_points.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-latex/final_box_plot.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-latex/final_violin_plot.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-latex/violin_with_jitter.png +0 -0
- data/lib/R_interface/rdata_frame.rb +0 -12
- data/lib/R_interface/robject.rb +14 -14
- data/lib/R_interface/ruby_extensions.rb +3 -31
- data/lib/R_interface/rvector.rb +0 -12
- data/lib/gknit/knitr_engine.rb +5 -3
- data/lib/util/exec_ruby.rb +22 -61
- data/specs/tmp.rb +26 -12
- data/version.rb +1 -1
- metadata +22 -17
- data/bin/gknit_old_r +0 -236
- data/blogs/dev/dev.Rmd +0 -23
- data/blogs/dev/dev.md +0 -58
- data/blogs/dev/dev2.Rmd +0 -65
- data/blogs/dev/model.rb +0 -41
- data/blogs/dplyr/dplyr.Rmd +0 -29
- data/blogs/dplyr/dplyr.html +0 -433
- data/blogs/dplyr/dplyr.md +0 -58
- data/blogs/dplyr/dplyr.rb +0 -63
- data/blogs/galaaz_ggplot/galaaz_ggplot.log +0 -640
- data/blogs/galaaz_ggplot/galaaz_ggplot.md +0 -431
- data/blogs/galaaz_ggplot/galaaz_ggplot.tex +0 -481
- data/blogs/galaaz_ggplot/midwest.png +0 -0
- data/blogs/galaaz_ggplot/scatter_plot.png +0 -0
- data/blogs/ruby_plot/ruby_plot.tex +0 -1077
data/blogs/gknit/gknit.html
CHANGED
@@ -373,7 +373,7 @@ $(document).ready(function () {
|
|
373
373
|
<h1 class="title toc-ignore">How to do reproducible research in Ruby with gKnit</h1>
|
374
374
|
<h4 class="author"><em>Rodrigo Botafogo</em></h4>
|
375
375
|
<h4 class="author"><em>Daniel Mossé - University of Pittsburgh</em></h4>
|
376
|
-
<h4 class="date"><em>
|
376
|
+
<h4 class="date"><em>29/04/2019</em></h4>
|
377
377
|
|
378
378
|
</div>
|
379
379
|
|
@@ -401,9 +401,9 @@ puts lst</code></pre>
|
|
401
401
|
## [1] 3</code></pre>
|
402
402
|
<p>Now, any single code has dozens of variables that we might want to use and reuse between chunks. Clearly, such an approach becomes quickly unmanageable. Probably, because of this problem, it is very rare to see any <strong>R markdown</strong> document in the Ruby community.</p>
|
403
403
|
<p>When variables can be used accross chunks, then no overhead is needed:</p>
|
404
|
-
<pre class="ruby"><code
|
404
|
+
<pre class="ruby"><code>lst = R.list(a: 1, b: 2, c: 3)
|
405
405
|
# any other code can be added here</code></pre>
|
406
|
-
<pre class="ruby"><code>puts
|
406
|
+
<pre class="ruby"><code>puts lst</code></pre>
|
407
407
|
<pre><code>## $a
|
408
408
|
## [1] 1
|
409
409
|
##
|
@@ -544,7 +544,7 @@ g <- ggplot(mpg_select, aes(displ, cty)) +
|
|
544
544
|
|
545
545
|
g + geom_jitter(aes(col=manufacturer, size=hwy)) +
|
546
546
|
geom_smooth(aes(col=manufacturer), method="lm", se=F)</code></pre>
|
547
|
-
<p><img src="data:image/png;base64,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eBm7ZE6izOUns0GEEALw/43CMlX00ivUkr7//nu7AV9aWvq///u/GzZskEHd+fPnRWZm86iM323SpIlEhdqH16dPn23bttXehaDX/v37626afdtp1KiRWXJvJgHLX//613FxcbGxsV26dDGy05pLZhIu9ejRw1orevnD+PzzzydPnixuI0Qyba2e3/SniTsJcathWk8uA3gZu2ROoszlJ7NBhBAC8P+NwlJTJpE8Sc3ZRKot/SsyMvI3v/nN0aNHpTeqxbzaRnY6ne7ixYufffZZUFDQv/71r9orDBgwQARugX+RkH366acPPvigzaMyflckkdOmTSsoKBBI++677+655x7jv8THe++9d+/eveIATBvZ7dmzRySd8fHx5eXlYqfio7HnFlWm2bedwMDAH374QZ7xCxcuHDZs2NChQxctWmRcaM2l2hKQFraIm5sbN25Yew/e4mEIqItf9Le//W3mzJmqKmaUAF7GLpmTKHP5yWwQIYQA/H+j8IoVK+677z5fX1+RPq5Zs8Z0tZUrV3bq1El6T2nZsmVNmzZVCHhJzZs3F9t87rnnRHJpce/bt29/4oknpDfKBg0alJ6ebvOojN8V5H7qqaf8/PzE1x966CFxG2GWYkqvUXXu3Nn06yLz69evX8uWLcWx9e3b15joqzLNvu188cUXIj8WCbSMdQLMv7wlMWNcaM0li4qJifnzn/981113GXuyE/xTchjLly8XduXk5Dgc8DJ2yZ9EmcvP2gYRQsiTAV/HuwFrSkpKEom4qx0VcpRmz55tbGrngnLm5YcQAvCeD3gR8c+dO6fX61NSUnr27BkREQHgPVJxcXFt27a9ePGiSx1VQ11+CCEA7/mAX7duXdeuXX19fTt16jRjxgyLzb4AvAdcA+3bt9++fburHVhDXX4IIQCPEEIIIQCPEEIIIQCPEEIIIQCPEEIIIQCPEEIIIQCPEEIIAXiEEEIIAXjHKSUlZTpCCCGX14ULF6ApgFehf/7zn08//fQ/FejVV1/9xz/+8U930JgxY1555RW3OFQ3chVjcRVXG9DVvn37CsZDUwCvDvAKL5ry8vKKigq3sPvGjRvuMvi3G7mKsbiKqw3oqvJYjQA8gCdiYiyu4iqARwCesg3gMRZXcRXAIwBP2QbwGIuruArgATyAp2wDeFCEq7gK4AE8gCdiYiyXK64CeATgATwR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" /><!-- --></p>
|
547
|
+
<p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAqAAAAHgCAIAAAD17khjAABfX0lEQVR42u29C1xUdf7/j4mKl3WJXLtA6prb8i1/Zunu6kalfa11NVtW3dWvUZm5m/Xftmy9BWhp3sJL3lJLXa3WxDTBS95NE0QQAQVFkRAVFJGbCMwwDAz/D552moaZM2duMJfn63EePM4czpw585rP5/0878/5nM/Hpx4hhBBCHicfLEAIIYQAPEIIIYQAPEIIIYQAPEIIIYQAPEIIIYQAPEIIIQTgEUIIIQTgEUIIIQTgEUIIIQTgHfA9b8upOzj19BBCCCFPA7yPgVq3bh0cHPzhhx/W1dUBeK4bEEIIeQjg9ZoyZQqAB/AIIYTcHvDSelVVVVRUlHjZqVMnAA/gEUIIeQjghTQajXjp5+cnTzKjLdLLW7duvfLKKx07duzQoUNoaGhubq61Oxh+xBdffPHUU0/9/Oc/b9269QMPPDB58uSbN2/KfBGtVrtkyZI+ffq0b9++bdu24r07duww+vQXX3yxXbt2d91119SpU3U6nf69+/fvHzp0qPgs8cb+/fsfPHiw8ZetqKh47bXXAgICWrZsabLlg+KOEEIA3kUBr1KpFi1aJF4K2tkA+Oeff94QeEFBQSUlJVbtIK0L9I4ZM6YxQR9++OHy8nKT36KmpubZZ581B11pXVxSGP5r+fLlRuevV6tWrU6ePCnz7QA8QggBePcAvGE/u5deeunGjRs2AF7k2UlJSRqNJjEx8Ze//KXhvXyFO0jra9asEetih9jYWJG1C3gL3D7++ONio8i8TX6LhQsXiv/+7Gc/E+8tLi4WH5GQkCCIbnjw3/3ud9nZ2VVVVW+++aZ42bdvX/3bR44cmZKSIt6Vl5c3evRo8V/x1+jbdenS5dChQ2IfGVsQQggBeBcFvFBgYODHH39sA+D37dun37Jnzx6x5X/+53+s2kFaFyQW6ydOnDD8xPz8fLHxV7/6lclv8cgjj4j//uc//5H5jmlpadLLwsJC8bJ9+/Ymdy4rKxP/vf/++43evnv3bpnGD4QQQgDeFQEvrWu12nPnzv35z38WWxYvXmwt4FUqlX6LSJQN7+Ur3EFab9eunY8ZtWrVyuS3aNu2rXSbXOY71tbWmjx/sX3BggW9e/c2/NzWrVsb7SxOGMAjhBByS8BLKi4ulm6Qm9tHENGpgJdobU42A97clokTJ8p/kLnPBfAIIQTg3Q/wbdq00W+RUtvCwkLpZWpqqlOb6Pv27SvWMzIylH8LkX+Lt2zcuNEGwAcEBIj16Ojomzdv6nS68vJyhYBv0aKF2G7YGx8hhBCAd0XAi9T8/PnzUhP9Y489pt+nT58+Yss///lPkYJnZ2dL98gbI7BHjx5JSUk1NTWJiYndu3dv3IfO4g7S+r///W+pU9tnn3125coVrVZbXV2dlZX16aef9u/f3+S3kDr///znPxfvLSkp0Wg0x48fN+pkZ+5bS9l/bGys+JScnJxRo0YpBPxdd90ltn/77bcwHiGEALyLAt5Ivr6+IsPW77N8+XLD//7pT38yicBhw4bJPwVncQf9AaWO7sqb6MVFw//+7//KPyZnDvDSBY1ezz33nELAjxw5ksfkEEIIwLsB4Fu2bHnvvfeOGDFCZNiG+4gMderUqSJh/dnPfvbiiy/eunXLJALLy8vHjRt35513tm/fXlwEXLx40dodDD/04MGDgqCBgYGtWrUSSfbDDz/8xhtvJCUlmfsigvELFizo1auXn5+fOP6AAQOMBroxB/iioqLhw4e3a9fO399/7NixN2/eVAj4q1evCq8CAgKktnqKO0IIAXiEEEIIAXiEEEIIAXiEEEIIAXiEEEIIAXiEEEIIwGMBQgghBOARQgghBOARQgghBOARQgghBOARQgghBOARQgghAI8QQgghAI8QQgghAI8QQgghAI8QQgghAI8QQggBeCRv0H/Vrl277t27//Wvf929e7fRDvYcHIdltHfv3qFDh3bq1MnX1/fuu+8ePnz4gQMHHOKbOMKQIUNM/kts1x+/8QpCCAF4zwG8tFJdXZ2bm7thw4bg4OBXX33VywHfBGc+ffr0xx57bOfOnaWlpTU1NcnJySNGjJA+137uijcGBgampaUZbRdbxHYAjxAC8F4EeL0qKyt79er1xRdfuAUm3RTw+/bte+SRR1QqldH2uXPnOuQ0xBs//vjjv/zlL0bbR44cuXLlysaHBfAIIQDveJBs3Lixb9++bdu2bd++/aBBgzIyMnbv3v373/++Xbt2Ysuf//znGzdu6HdevXp1jx49WrVq1b179/Xr1xse6pNPPunWrZv4l9hB7GYYsmXCt8l/ff31108//bTRDpmZmX/84x87duzYunVrkXpGR0dbPCvDg1+/fv31118X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" /><!-- --></p>
|
548
548
|
</div>
|
549
549
|
<div id="ruby-chunks" class="section level3">
|
550
550
|
<h3>Ruby chunks</h3>
|
@@ -552,21 +552,23 @@ g + geom_jitter(aes(col=manufacturer, size=hwy)) +
|
|
552
552
|
<pre><code>```{ruby first_ruby_chunk}
|
553
553
|
```</code></pre>
|
554
554
|
<p>In this example, the ruby chunk is called ‘first_ruby_chunk’. One important aspect of chunk labels is that they cannot be duplicated. If a chunk label is duplicated, gKnit will stop with an error.</p>
|
555
|
-
<p>
|
555
|
+
<p>In the following chunk, variable ‘a’, ‘b’ and ‘c’ are standard Ruby variables and ‘vec’ and ‘vec2’ are two vectors created by calling the ‘c’ method on the R module.</p>
|
556
556
|
<p>In Galaaz, the R module allows us to access R functions transparently. The ‘c’ function in R, is a function that concatenates its arguments making a vector.</p>
|
557
557
|
<p>It should be clear that there is no requirement in gknit to call or use any R functions. gKnit will knit standard Ruby code, or even general text without any code.</p>
|
558
|
-
<pre class="ruby"><code
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
<p>In
|
565
|
-
<pre class="ruby"><code>puts
|
566
|
-
puts
|
567
|
-
<pre><code>##
|
558
|
+
<pre class="ruby"><code>a = [1, 2, 3]
|
559
|
+
b = "US$ 250.000"
|
560
|
+
c = "The 'outputs' function"
|
561
|
+
|
562
|
+
vec = R.c(1, 2, 3)
|
563
|
+
vec2 = R.c(10, 20, 30)</code></pre>
|
564
|
+
<p>In the next block, variables ‘a’, ‘vec’ and ‘vec2’ are used and printed.</p>
|
565
|
+
<pre class="ruby"><code>puts a
|
566
|
+
puts vec * vec2</code></pre>
|
567
|
+
<pre><code>## 1
|
568
|
+
## 2
|
569
|
+
## 3
|
568
570
|
## [1] 10 40 90</code></pre>
|
569
|
-
<p>Note that
|
571
|
+
<p>Note that ‘a’ is a standard Ruby Array and ‘vec’ and ‘vec2’ are vectors that behave accordingly, where multiplication works as expected.</p>
|
570
572
|
</div>
|
571
573
|
<div id="accessing-r-from-ruby" class="section level3">
|
572
574
|
<h3>Accessing R from Ruby</h3>
|
@@ -594,32 +596,32 @@ puts @vec * @vec2</code></pre>
|
|
594
596
|
<li>carb: Number of carburetors</li>
|
595
597
|
</ul>
|
596
598
|
<pre class="ruby"><code># copy the R variable :mtcars to the Ruby mtcars variable
|
597
|
-
|
599
|
+
mtcars = ~:mtcars
|
598
600
|
|
599
601
|
# create a new column 'car_name' to store the car names so that it can be
|
600
602
|
# used for plotting. The 'rownames' of the data frame cannot be used as
|
601
603
|
# data for plotting
|
602
|
-
|
604
|
+
mtcars.car_name = R.rownames(:mtcars)
|
603
605
|
|
604
606
|
# compute normalized mpg and add it to a new column called mpg_z
|
605
607
|
# Note that the mean value for mpg can be obtained by calling the 'mean'
|
606
608
|
# function on the vector 'mtcars.mpg'. The same with the standard
|
607
609
|
# deviation 'sd'. The vector is then rounded to two digits with 'round 2'
|
608
|
-
|
610
|
+
mtcars.mpg_z = ((mtcars.mpg - mtcars.mpg.mean)/mtcars.mpg.sd).round 2
|
609
611
|
|
610
612
|
# create a new column 'mpg_type'. Function 'ifelse' is a vectorized function
|
611
613
|
# that looks at every element of the mpg_z vector and if the value is below
|
612
614
|
# 0, returns 'below', otherwise returns 'above'
|
613
|
-
|
615
|
+
mtcars.mpg_type = (mtcars.mpg_z < 0).ifelse("below", "above")
|
614
616
|
|
615
617
|
# order the mtcar data set by the mpg_z vector from smaler to larger values
|
616
|
-
|
618
|
+
mtcars = mtcars[mtcars.mpg_z.order, :all]
|
617
619
|
|
618
620
|
# convert the car_name column to a factor to retain sorted order in plot
|
619
|
-
|
621
|
+
mtcars.car_name = mtcars.car_name.factor levels: mtcars.car_name
|
620
622
|
|
621
623
|
# let's look at the first records of the final data frame
|
622
|
-
puts
|
624
|
+
puts mtcars.head</code></pre>
|
623
625
|
<pre><code>## mpg cyl disp hp drat wt qsec vs am gear carb
|
624
626
|
## Cadillac Fleetwood 10.4 8 472 205 2.93 5.250 17.98 0 0 3 4
|
625
627
|
## Lincoln Continental 10.4 8 460 215 3.00 5.424 17.82 0 0 3 4
|
@@ -636,7 +638,7 @@ puts @mtcars.head</code></pre>
|
|
636
638
|
## Maserati Bora Maserati Bora -0.84 below</code></pre>
|
637
639
|
<pre class="ruby"><code>require 'ggplot'
|
638
640
|
|
639
|
-
puts
|
641
|
+
puts mtcars.ggplot(E.aes(x: :car_name, y: :mpg_z, label: :mpg_z)) +
|
640
642
|
R.geom_bar(E.aes(fill: :mpg_type), stat: 'identity', width: 0.5) +
|
641
643
|
R.scale_fill_manual(name: 'Mileage',
|
642
644
|
labels: R.c('Above Average', 'Below Average'),
|
@@ -649,14 +651,14 @@ puts @mtcars.ggplot(E.aes(x: :car_name, y: :mpg_z, label: :mpg_z)) +
|
|
649
651
|
<div id="inline-ruby-code" class="section level3">
|
650
652
|
<h3>Inline Ruby code</h3>
|
651
653
|
<p>When using a Ruby chunk, the code and the output are formatted in blocks as seen above. This formatting is not always desired. Sometimes, we want to have the results of the Ruby evaluation included in the middle of a phrase. gKnit allows adding inline Ruby code with the ‘rb’ engine. The following chunk specification will create and inline Ruby text:</p>
|
652
|
-
<pre><code>This is some text with inline Ruby accessing variable
|
653
|
-
```{rb puts
|
654
|
+
<pre><code>This is some text with inline Ruby accessing variable 'b' which has value:
|
655
|
+
```{rb puts b}
|
654
656
|
```
|
655
657
|
and is followed by some other text!</code></pre>
|
656
658
|
<div style="margin-bottom:30px;">
|
657
659
|
|
658
660
|
</div>
|
659
|
-
<p>This is some text with inline Ruby accessing variable
|
661
|
+
<p>This is some text with inline Ruby accessing variable ‘b’ which has value: US$ 250.000 and is followed by some other text!</p>
|
660
662
|
<div style="margin-bottom:30px;">
|
661
663
|
|
662
664
|
</div>
|
@@ -666,10 +668,10 @@ and is followed by some other text!</code></pre>
|
|
666
668
|
<h3>The ‘outputs’ function</h3>
|
667
669
|
<p>He have previously used the standard ‘puts’ method in Ruby chunks in order produce output. The result of a ‘puts’, as seen in all previous chunks that use it, is formatted inside a white box that follows the code block. Many times however, we would like to do some processing in the Ruby chunk and have the result of this processing generate and output that is “included” in the document as if we had typed it in <strong>R markdown</strong> document.</p>
|
668
670
|
<p>For example, suppose we want to create a new heading in our document, but the heading phrase is the result of some code processing: maybe it’s the first line of a file we are going to read. Method ‘outputs’ adds its output as if typed in the <strong>R markdown</strong> document.</p>
|
669
|
-
<p>Take now a look at variable
|
671
|
+
<p>Take now a look at variable ‘c’ (it was defined in a previous block above) as ‘c = “The ‘outputs’ function”. “The ‘outputs’ function” is actually the name of this section and it was created using the ’outputs’ function inside a Ruby chunk.</p>
|
670
672
|
<p>The ruby chunk to generate this heading is:</p>
|
671
673
|
<pre><code>```{ruby heading}
|
672
|
-
outputs "### #{
|
674
|
+
outputs "### #{c}"
|
673
675
|
```</code></pre>
|
674
676
|
<p>The three ‘###’ is the way we add a Heading 3 in <strong>R markdown</strong>.</p>
|
675
677
|
</div>
|
@@ -2177,7 +2179,7 @@ author: "Rodrigo Botafogo"
|
|
2177
2179
|
tags: [Galaaz, Ruby, R, TruffleRuby, FastR, GraalVM, knitr, gknit]
|
2178
2180
|
date: "29 October 2018"
|
2179
2181
|
output:
|
2180
|
-
|
2182
|
+
pdf\_document:
|
2181
2183
|
includes:
|
2182
2184
|
in\_header: ["../../sty/galaaz.sty"]
|
2183
2185
|
number\_sections: yes
|
data/blogs/gknit/gknit.md
CHANGED
@@ -4,7 +4,7 @@ author:
|
|
4
4
|
- "Rodrigo Botafogo"
|
5
5
|
- "Daniel Mossé - University of Pittsburgh"
|
6
6
|
tags: [Tech, Data Science, Ruby, R, GraalVM]
|
7
|
-
date: "
|
7
|
+
date: "29/04/2019"
|
8
8
|
bibliography: stats.bib
|
9
9
|
output:
|
10
10
|
html_document:
|
@@ -38,9 +38,8 @@ the same output and reports.
|
|
38
38
|
|
39
39
|
The R community has put a great deal of effort in reproducible research. In 2002, Sweave was
|
40
40
|
introduced and it allowed mixing R code with Latex generating high quality PDF documents. A
|
41
|
-
Sweave
|
42
|
-
|
43
|
-
contained the whole narrative to reproduce the research. In
|
41
|
+
Sweave document could include code, the results of executing the code, graphics and text
|
42
|
+
such that it contained the whole narrative to reproduce the research. In
|
44
43
|
2012, Knitr, developed by Yihui Xie from RStudio was released to replace Sweave and to
|
45
44
|
consolidate in one single package the many extensions and add-on packages that
|
46
45
|
were necessary for Sweave.
|
@@ -99,13 +98,13 @@ When variables can be used accross chunks, then no overhead is needed:
|
|
99
98
|
|
100
99
|
|
101
100
|
```ruby
|
102
|
-
|
101
|
+
lst = R.list(a: 1, b: 2, c: 3)
|
103
102
|
# any other code can be added here
|
104
103
|
```
|
105
104
|
|
106
105
|
|
107
106
|
```ruby
|
108
|
-
puts
|
107
|
+
puts lst
|
109
108
|
```
|
110
109
|
|
111
110
|
```
|
@@ -379,12 +378,9 @@ In this example, the ruby chunk is called 'first_ruby_chunk'. One important
|
|
379
378
|
aspect of chunk labels is that they cannot be duplicated. If a chunk label is
|
380
379
|
duplicated, gKnit will stop with an error.
|
381
380
|
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
RubyChunk class. In the following chunk, variable '\@a', '\@b' and '\@c'
|
386
|
-
are standard Ruby variables and '\@vec' and '\@vec2' are two vectors created
|
387
|
-
by calling the 'c' method on the R module.
|
381
|
+
In the following chunk, variable 'a', 'b' and 'c' are standard Ruby variables
|
382
|
+
and 'vec' and 'vec2' are two vectors created by calling the 'c' method on the
|
383
|
+
R module.
|
388
384
|
|
389
385
|
In Galaaz, the R module allows us to access R functions transparently. The 'c'
|
390
386
|
function in R, is a function that concatenates its arguments making a vector.
|
@@ -396,28 +392,30 @@ any code.
|
|
396
392
|
|
397
393
|
|
398
394
|
```ruby
|
399
|
-
|
400
|
-
|
401
|
-
|
395
|
+
a = [1, 2, 3]
|
396
|
+
b = "US$ 250.000"
|
397
|
+
c = "The 'outputs' function"
|
402
398
|
|
403
|
-
|
404
|
-
|
399
|
+
vec = R.c(1, 2, 3)
|
400
|
+
vec2 = R.c(10, 20, 30)
|
405
401
|
```
|
406
402
|
|
407
|
-
In
|
403
|
+
In the next block, variables 'a', 'vec' and 'vec2' are used and printed.
|
408
404
|
|
409
405
|
|
410
406
|
```ruby
|
411
|
-
puts
|
412
|
-
puts
|
407
|
+
puts a
|
408
|
+
puts vec * vec2
|
413
409
|
```
|
414
410
|
|
415
411
|
```
|
416
|
-
##
|
412
|
+
## 1
|
413
|
+
## 2
|
414
|
+
## 3
|
417
415
|
## [1] 10 40 90
|
418
416
|
```
|
419
417
|
|
420
|
-
Note that
|
418
|
+
Note that 'a' is a standard Ruby Array and 'vec' and 'vec2' are vectors that behave accordingly,
|
421
419
|
where multiplication works as expected.
|
422
420
|
|
423
421
|
|
@@ -475,32 +473,32 @@ ten aspects are:
|
|
475
473
|
|
476
474
|
```ruby
|
477
475
|
# copy the R variable :mtcars to the Ruby mtcars variable
|
478
|
-
|
476
|
+
mtcars = ~:mtcars
|
479
477
|
|
480
478
|
# create a new column 'car_name' to store the car names so that it can be
|
481
479
|
# used for plotting. The 'rownames' of the data frame cannot be used as
|
482
480
|
# data for plotting
|
483
|
-
|
481
|
+
mtcars.car_name = R.rownames(:mtcars)
|
484
482
|
|
485
483
|
# compute normalized mpg and add it to a new column called mpg_z
|
486
484
|
# Note that the mean value for mpg can be obtained by calling the 'mean'
|
487
485
|
# function on the vector 'mtcars.mpg'. The same with the standard
|
488
486
|
# deviation 'sd'. The vector is then rounded to two digits with 'round 2'
|
489
|
-
|
487
|
+
mtcars.mpg_z = ((mtcars.mpg - mtcars.mpg.mean)/mtcars.mpg.sd).round 2
|
490
488
|
|
491
489
|
# create a new column 'mpg_type'. Function 'ifelse' is a vectorized function
|
492
490
|
# that looks at every element of the mpg_z vector and if the value is below
|
493
491
|
# 0, returns 'below', otherwise returns 'above'
|
494
|
-
|
492
|
+
mtcars.mpg_type = (mtcars.mpg_z < 0).ifelse("below", "above")
|
495
493
|
|
496
494
|
# order the mtcar data set by the mpg_z vector from smaler to larger values
|
497
|
-
|
495
|
+
mtcars = mtcars[mtcars.mpg_z.order, :all]
|
498
496
|
|
499
497
|
# convert the car_name column to a factor to retain sorted order in plot
|
500
|
-
|
498
|
+
mtcars.car_name = mtcars.car_name.factor levels: mtcars.car_name
|
501
499
|
|
502
500
|
# let's look at the first records of the final data frame
|
503
|
-
puts
|
501
|
+
puts mtcars.head
|
504
502
|
```
|
505
503
|
|
506
504
|
```
|
@@ -524,7 +522,7 @@ puts @mtcars.head
|
|
524
522
|
```ruby
|
525
523
|
require 'ggplot'
|
526
524
|
|
527
|
-
puts
|
525
|
+
puts mtcars.ggplot(E.aes(x: :car_name, y: :mpg_z, label: :mpg_z)) +
|
528
526
|
R.geom_bar(E.aes(fill: :mpg_type), stat: 'identity', width: 0.5) +
|
529
527
|
R.scale_fill_manual(name: 'Mileage',
|
530
528
|
labels: R.c('Above Average', 'Below Average'),
|
@@ -546,8 +544,8 @@ with the 'rb' engine. The following chunk specification will
|
|
546
544
|
create and inline Ruby text:
|
547
545
|
|
548
546
|
````
|
549
|
-
This is some text with inline Ruby accessing variable
|
550
|
-
```{rb puts
|
547
|
+
This is some text with inline Ruby accessing variable 'b' which has value:
|
548
|
+
```{rb puts b}
|
551
549
|
```
|
552
550
|
and is followed by some other text!
|
553
551
|
````
|
@@ -555,7 +553,7 @@ and is followed by some other text!
|
|
555
553
|
<div style="margin-bottom:30px;">
|
556
554
|
</div>
|
557
555
|
|
558
|
-
This is some text with inline Ruby accessing variable
|
556
|
+
This is some text with inline Ruby accessing variable 'b' which has value:
|
559
557
|
US$ 250.000
|
560
558
|
and is followed by some other text!
|
561
559
|
|
@@ -580,15 +578,15 @@ For example, suppose we want to create a new heading in our document, but the he
|
|
580
578
|
phrase is the result of some code processing: maybe it's the first line of a file we are
|
581
579
|
going to read. Method 'outputs' adds its output as if typed in the __R markdown__ document.
|
582
580
|
|
583
|
-
Take now a look at variable '
|
584
|
-
'
|
581
|
+
Take now a look at variable 'c' (it was defined in a previous block above) as
|
582
|
+
'c = "The 'outputs' function". "The 'outputs' function" is actually the name of this
|
585
583
|
section and it was created using the 'outputs' function inside a Ruby chunk.
|
586
584
|
|
587
585
|
The ruby chunk to generate this heading is:
|
588
586
|
|
589
587
|
````
|
590
588
|
```{ruby heading}
|
591
|
-
outputs "### #{
|
589
|
+
outputs "### #{c}"
|
592
590
|
```
|
593
591
|
````
|
594
592
|
|
@@ -1364,13 +1362,14 @@ author: "Rodrigo Botafogo"
|
|
1364
1362
|
tags: [Galaaz, Ruby, R, TruffleRuby, FastR, GraalVM, knitr, gknit]
|
1365
1363
|
date: "29 October 2018"
|
1366
1364
|
output:
|
1367
|
-
|
1365
|
+
pdf\_document:
|
1368
1366
|
includes:
|
1369
1367
|
in\_header: ["../../sty/galaaz.sty"]
|
1370
1368
|
number\_sections: yes
|
1371
1369
|
---
|
1372
1370
|
```
|
1373
1371
|
|
1372
|
+
|
1374
1373
|
# Conclusion
|
1375
1374
|
|
1376
1375
|
In order to do reproducible research, one of the main basic tools needed is a systhem that
|
data/blogs/gknit/gknit.pdf
CHANGED
Binary file
|
data/blogs/gknit/gknit.tex
CHANGED
@@ -122,7 +122,7 @@
|
|
122
122
|
\postauthor{\par}
|
123
123
|
\predate{\centering\large\emph}
|
124
124
|
\postdate{\par}
|
125
|
-
\date{
|
125
|
+
\date{29/04/2019}
|
126
126
|
|
127
127
|
% usar portugues do Brasil
|
128
128
|
% \usepackage[brazilian]{babel}
|
@@ -304,14 +304,14 @@ When variables can be used accross chunks, then no overhead is needed:
|
|
304
304
|
|
305
305
|
\begin{Shaded}
|
306
306
|
\begin{Highlighting}[]
|
307
|
-
\
|
307
|
+
\NormalTok{lst = R.list(}\StringTok{a: }\DecValTok{1}\NormalTok{, }\StringTok{b: }\DecValTok{2}\NormalTok{, }\StringTok{c: }\DecValTok{3}\NormalTok{)}
|
308
308
|
\CommentTok{# any other code can be added here}
|
309
309
|
\end{Highlighting}
|
310
310
|
\end{Shaded}
|
311
311
|
|
312
312
|
\begin{Shaded}
|
313
313
|
\begin{Highlighting}[]
|
314
|
-
\NormalTok{puts
|
314
|
+
\NormalTok{puts lst}
|
315
315
|
\end{Highlighting}
|
316
316
|
\end{Shaded}
|
317
317
|
|
@@ -630,12 +630,9 @@ In this example, the ruby chunk is called `first\_ruby\_chunk'. One
|
|
630
630
|
important aspect of chunk labels is that they cannot be duplicated. If a
|
631
631
|
chunk label is duplicated, gKnit will stop with an error.
|
632
632
|
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
the RubyChunk class. In the following chunk, variable `@a', `@b' and
|
637
|
-
`@c' are standard Ruby variables and `@vec' and `@vec2' are two vectors
|
638
|
-
created by calling the `c' method on the R module.
|
633
|
+
In the following chunk, variable `a', `b' and `c' are standard Ruby
|
634
|
+
variables and `vec' and `vec2' are two vectors created by calling the
|
635
|
+
`c' method on the R module.
|
639
636
|
|
640
637
|
In Galaaz, the R module allows us to access R functions transparently.
|
641
638
|
The `c' function in R, is a function that concatenates its arguments
|
@@ -647,31 +644,32 @@ text without any code.
|
|
647
644
|
|
648
645
|
\begin{Shaded}
|
649
646
|
\begin{Highlighting}[]
|
650
|
-
\
|
651
|
-
\
|
652
|
-
\
|
647
|
+
\NormalTok{a = [}\DecValTok{1}\NormalTok{, }\DecValTok{2}\NormalTok{, }\DecValTok{3}\NormalTok{]}
|
648
|
+
\NormalTok{b = }\StringTok{"US$ 250.000"}
|
649
|
+
\NormalTok{c = }\StringTok{"The 'outputs' function"}
|
653
650
|
|
654
|
-
\
|
655
|
-
\
|
651
|
+
\NormalTok{vec = R.c(}\DecValTok{1}\NormalTok{, }\DecValTok{2}\NormalTok{, }\DecValTok{3}\NormalTok{)}
|
652
|
+
\NormalTok{vec2 = R.c(}\DecValTok{10}\NormalTok{, }\DecValTok{20}\NormalTok{, }\DecValTok{30}\NormalTok{)}
|
656
653
|
\end{Highlighting}
|
657
654
|
\end{Shaded}
|
658
655
|
|
659
|
-
In
|
660
|
-
printed.
|
656
|
+
In the next block, variables `a', `vec' and `vec2' are used and printed.
|
661
657
|
|
662
658
|
\begin{Shaded}
|
663
659
|
\begin{Highlighting}[]
|
664
|
-
\NormalTok{puts
|
665
|
-
\NormalTok{puts
|
660
|
+
\NormalTok{puts a}
|
661
|
+
\NormalTok{puts vec * vec2}
|
666
662
|
\end{Highlighting}
|
667
663
|
\end{Shaded}
|
668
664
|
|
669
665
|
\begin{verbatim}
|
670
|
-
##
|
666
|
+
## 1
|
667
|
+
## 2
|
668
|
+
## 3
|
671
669
|
## [1] 10 40 90
|
672
670
|
\end{verbatim}
|
673
671
|
|
674
|
-
Note that
|
672
|
+
Note that `a' is a standard Ruby Array and `vec' and `vec2' are vectors
|
675
673
|
that behave accordingly, where multiplication works as expected.
|
676
674
|
|
677
675
|
\hypertarget{accessing-r-from-ruby}{%
|
@@ -747,32 +745,32 @@ performance for 32 automobiles (1973--74 models). The ten aspects are:
|
|
747
745
|
\begin{Shaded}
|
748
746
|
\begin{Highlighting}[]
|
749
747
|
\CommentTok{# copy the R variable :mtcars to the Ruby mtcars variable}
|
750
|
-
\
|
748
|
+
\NormalTok{mtcars = ~}\StringTok{:mtcars}
|
751
749
|
|
752
750
|
\CommentTok{# create a new column 'car_name' to store the car names so that it can be}
|
753
751
|
\CommentTok{# used for plotting. The 'rownames' of the data frame cannot be used as}
|
754
752
|
\CommentTok{# data for plotting}
|
755
|
-
\
|
753
|
+
\NormalTok{mtcars.car_name = R.rownames(}\StringTok{:mtcars}\NormalTok{)}
|
756
754
|
|
757
755
|
\CommentTok{# compute normalized mpg and add it to a new column called mpg_z}
|
758
756
|
\CommentTok{# Note that the mean value for mpg can be obtained by calling the 'mean'}
|
759
757
|
\CommentTok{# function on the vector 'mtcars.mpg'. The same with the standard}
|
760
758
|
\CommentTok{# deviation 'sd'. The vector is then rounded to two digits with 'round 2'}
|
761
|
-
\
|
759
|
+
\NormalTok{mtcars.mpg_z = ((mtcars.mpg - mtcars.mpg.mean)/mtcars.mpg.sd).round }\DecValTok{2}
|
762
760
|
|
763
761
|
\CommentTok{# create a new column 'mpg_type'. Function 'ifelse' is a vectorized function}
|
764
762
|
\CommentTok{# that looks at every element of the mpg_z vector and if the value is below}
|
765
763
|
\CommentTok{# 0, returns 'below', otherwise returns 'above'}
|
766
|
-
\
|
764
|
+
\NormalTok{mtcars.mpg_type = (mtcars.mpg_z < }\DecValTok{0}\NormalTok{).ifelse(}\StringTok{"below"}\NormalTok{, }\StringTok{"above"}\NormalTok{)}
|
767
765
|
|
768
766
|
\CommentTok{# order the mtcar data set by the mpg_z vector from smaler to larger values}
|
769
|
-
\
|
767
|
+
\NormalTok{mtcars = mtcars[mtcars.mpg_z.order, }\StringTok{:all}\NormalTok{]}
|
770
768
|
|
771
769
|
\CommentTok{# convert the car_name column to a factor to retain sorted order in plot}
|
772
|
-
\
|
770
|
+
\NormalTok{mtcars.car_name = mtcars.car_name.factor }\StringTok{levels: }\NormalTok{mtcars.car_name}
|
773
771
|
|
774
772
|
\CommentTok{# let's look at the first records of the final data frame}
|
775
|
-
\NormalTok{puts
|
773
|
+
\NormalTok{puts mtcars.head}
|
776
774
|
\end{Highlighting}
|
777
775
|
\end{Shaded}
|
778
776
|
|
@@ -797,7 +795,7 @@ performance for 32 automobiles (1973--74 models). The ten aspects are:
|
|
797
795
|
\begin{Highlighting}[]
|
798
796
|
\NormalTok{require }\StringTok{'ggplot'}
|
799
797
|
|
800
|
-
\NormalTok{puts
|
798
|
+
\NormalTok{puts mtcars.ggplot(E.aes(}\StringTok{x: :car_name}\NormalTok{, }\StringTok{y: :mpg_z}\NormalTok{, }\StringTok{label: :mpg_z}\NormalTok{)) +}
|
801
799
|
\NormalTok{ R.geom_bar(E.aes(}\StringTok{fill: :mpg_type}\NormalTok{), }\StringTok{stat: 'identity'}\NormalTok{, }\StringTok{width: }\FloatTok{0.5}\NormalTok{) +}
|
802
800
|
\NormalTok{ R.scale_fill_manual(}\StringTok{name: 'Mileage'}\NormalTok{,}
|
803
801
|
\StringTok{labels: }\NormalTok{R.c(}\StringTok{'Above Average'}\NormalTok{, }\StringTok{'Below Average'}\NormalTok{),}
|
@@ -820,13 +818,13 @@ phrase. gKnit allows adding inline Ruby code with the `rb' engine. The
|
|
820
818
|
following chunk specification will create and inline Ruby text:
|
821
819
|
|
822
820
|
\begin{verbatim}
|
823
|
-
This is some text with inline Ruby accessing variable
|
824
|
-
```{rb puts
|
821
|
+
This is some text with inline Ruby accessing variable 'b' which has value:
|
822
|
+
```{rb puts b}
|
825
823
|
```
|
826
824
|
and is followed by some other text!
|
827
825
|
\end{verbatim}
|
828
826
|
|
829
|
-
This is some text with inline Ruby accessing variable
|
827
|
+
This is some text with inline Ruby accessing variable `b' which has
|
830
828
|
value: US\$ 250.000 and is followed by some other text!
|
831
829
|
|
832
830
|
Note that it is important not to add any new line before of after the
|
@@ -849,16 +847,16 @@ but the heading phrase is the result of some code processing: maybe it's
|
|
849
847
|
the first line of a file we are going to read. Method `outputs' adds its
|
850
848
|
output as if typed in the \textbf{R markdown} document.
|
851
849
|
|
852
|
-
Take now a look at variable
|
853
|
-
above) as
|
854
|
-
|
855
|
-
|
850
|
+
Take now a look at variable `c' (it was defined in a previous block
|
851
|
+
above) as `c = ``The `outputs' function''. ``The `outputs' function'' is
|
852
|
+
actually the name of this section and it was created using the 'outputs'
|
853
|
+
function inside a Ruby chunk.
|
856
854
|
|
857
855
|
The ruby chunk to generate this heading is:
|
858
856
|
|
859
857
|
\begin{verbatim}
|
860
858
|
```{ruby heading}
|
861
|
-
outputs "### #{
|
859
|
+
outputs "### #{c}"
|
862
860
|
```
|
863
861
|
\end{verbatim}
|
864
862
|
|
@@ -1248,7 +1246,7 @@ author: "Rodrigo Botafogo"
|
|
1248
1246
|
tags: [Galaaz, Ruby, R, TruffleRuby, FastR, GraalVM, knitr, gknit]
|
1249
1247
|
date: "29 October 2018"
|
1250
1248
|
output:
|
1251
|
-
|
1249
|
+
pdf\_document:
|
1252
1250
|
includes:
|
1253
1251
|
in\_header: ["../../sty/galaaz.sty"]
|
1254
1252
|
number\_sections: yes
|