New Upstream Snapshot - r-cran-magrittr

Ready changes

Summary

Merged new upstream version: 2.0.3+git20220330.1.80c2621 (was: 2.0.3).

Resulting package

Built on 2022-11-18T11:02 (took 9m8s)

The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:

apt install -t fresh-snapshots r-cran-magrittr-dbgsymapt install -t fresh-snapshots r-cran-magrittr

Diff

diff --git a/DESCRIPTION b/DESCRIPTION
index 37a6deb..afa76c6 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -1,7 +1,7 @@
 Type: Package
 Package: magrittr
 Title: A Forward-Pipe Operator for R
-Version: 2.0.3
+Version: 2.0.3.9000
 Authors@R: c(
     person("Stefan Milton", "Bache", , "stefan@stefanbache.dk", role = c("aut", "cph"),
            comment = "Original author and creator of magrittr"),
@@ -25,14 +25,13 @@ VignetteBuilder: knitr
 ByteCompile: Yes
 Config/Needs/website: tidyverse/tidytemplate
 Encoding: UTF-8
+Roxygen: list(markdown = TRUE)
 RoxygenNote: 7.1.2
 NeedsCompilation: yes
-Packaged: 2022-03-29 09:34:37 UTC; lionel
+Packaged: 2022-11-18 10:58:24 UTC; root
 Author: Stefan Milton Bache [aut, cph] (Original author and creator of
     magrittr),
   Hadley Wickham [aut],
   Lionel Henry [cre],
   RStudio [cph, fnd]
 Maintainer: Lionel Henry <lionel@rstudio.com>
-Repository: CRAN
-Date/Publication: 2022-03-30 07:30:09 UTC
diff --git a/MD5 b/MD5
deleted file mode 100644
index 4c63813..0000000
--- a/MD5
+++ /dev/null
@@ -1,57 +0,0 @@
-b916d6c485b3a0d2c034c50bda957582 *DESCRIPTION
-b1e40687f249a5e3b384b410b621f40a *LICENSE
-6947759fe41ccdda4f5fd4759f68a4a8 *NAMESPACE
-631d52ef319ccec69a02e519dfe0a17a *NEWS.md
-0dd7466a6ea2104983d2230d14af6517 *R/aliases.R
-69feb260d9d9596cff7279727b7194ff *R/debug_pipe.R
-316e23f4777296ee8dfe469684f244cb *R/freduce.R
-a45c20797cf0f44b148a253a6d8a338a *R/functions.R
-a6e5e9ab01efeaa0e1d03a78f668d706 *R/getters.R
-33c7b4d774c39ca299ebb21e684e6c92 *R/magrittr.R
-c77c8b2e5b0b76bb7501ee0439c7c26d *R/pipe.R
-b355c081f7dc2aced5ca65e9020a75ba *README.md
-084078aa68b48964d1edd278e8860b0b *build/vignette.rds
-786d5e98d2db43ca57b1b05b6c98e262 *inst/doc/magrittr.R
-ae2a5f945966923225eb4b7fd50e7834 *inst/doc/magrittr.Rmd
-a54471576785915e722e83cc96735845 *inst/doc/magrittr.html
-e6000bf0b0354a95dd0de7a3768c0ad0 *inst/doc/tradeoffs.R
-ade5c863f8b1f237fcf3642076c00d3e *inst/doc/tradeoffs.Rmd
-d842f8208444adc942eca16846ccfa88 *inst/doc/tradeoffs.html
-320671fcbeb26a1ad31a8be1b8259db1 *inst/logo-hex.png
-49d0817fc5a43e2c1593194ab84fc1d1 *inst/logo-hex.svg
-d874c14ccdcddaeae92f28cd7c8097ca *inst/logo.png
-9c8e1ed8c5dad58b4f422ed25cb4bf6c *inst/logo.svg
-d6201baf5e138c57361b9b1967215845 *man/aliases.Rd
-4fa184155b60d0b52276216ae391479e *man/compound.Rd
-b54749212b910263c3c801a002ae9406 *man/debug_fseq.Rd
-f167a1631d3dffb9205ec94886301b29 *man/debug_pipe.Rd
-b5d5f05a8e8832bdf970bcff87fb738d *man/exposition.Rd
-832875909ce77c2efda116437eac8129 *man/faq-pipe-gender.Rd
-fd4ab3e55d76f18a21681c9d90e0a8de *man/figures/exposition-1.png
-2a60de702f54976c2e9de39fa44a72f4 *man/figures/logo.png
-1b42ebf4f0f9985208454a1f9c6f800a *man/freduce.Rd
-2528e04ada11d08d8da41baaa3d479f7 *man/fseq.Rd
-74c85cb379ef50b8f1c7b8186efb1e81 *man/functions.Rd
-86e5ff38030fc24d1786d61d48951988 *man/magrittr-package.Rd
-426c1d05f7211bd8cb7adf3cc9304525 *man/pipe-eager.Rd
-c6cef1f6258a3061fb862eb045dcc83e *man/pipe.Rd
-447ded028c32a4bcdd7f5334b8acc99a *man/pipe_eager_lexical.Rd
-adc2d8bbc2bf764e31a81697036b84db *man/print.fseq.Rd
-6831d192911395cd3b279c65676efea7 *man/tee.Rd
-72eb49eb68a7128ba3b859142f1bf9cc *src/pipe.c
-f805d279bd107cd19da7f3fa8fb4b574 *src/utils.c
-edbdd325f4ab34f277befd07c0f7b460 *src/utils.h
-5e09eabe3f9582bc4a32ca84f35d8a9b *tests/testthat.R
-30319b5105d94ffc98d12192ed8afc9d *tests/testthat/_snaps/pipe.md
-7d5896a8b77e28f7e25163f1e73b3dab *tests/testthat/test-aliases.R
-64337bd67479693182ac3f5b08fea829 *tests/testthat/test-anonymous-functions.r
-0ea1983d5b233cb1307a327e3b6a92a0 *tests/testthat/test-compound.R
-f6e1913c08e715fc9e15d984f45e94b0 *tests/testthat/test-freduce.R
-68f6eb8ce9c54a6b2e3a15846f94b4c8 *tests/testthat/test-fseq.r
-e8780a5936700ff4965f160284c2e40b *tests/testthat/test-multiple-arguments.r
-b2947ccf703a58273791a50a8d248829 *tests/testthat/test-pipe.R
-a5f494991871eb8076d4a0dea09d5004 *tests/testthat/test-single-argument.r
-0383040641b84042c281763473cda3f6 *tests/testthat/test-tee.r
-ae2a5f945966923225eb4b7fd50e7834 *vignettes/magrittr.Rmd
-561cc58e6362ebd922d69884e825c808 *vignettes/magrittr.jpg
-ade5c863f8b1f237fcf3642076c00d3e *vignettes/tradeoffs.Rmd
diff --git a/NEWS.md b/NEWS.md
index 1db8293..59074ff 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -1,3 +1,5 @@
+# magrittr (development version)
+
 # magrittr 2.0.3
 
 * Fixed a C level protection issue in `%>%` (#256).
diff --git a/build/vignette.rds b/build/vignette.rds
index 847a55a..332ebda 100644
Binary files a/build/vignette.rds and b/build/vignette.rds differ
diff --git a/debian/changelog b/debian/changelog
index d5b9b84..c7af82d 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+r-cran-magrittr (2.0.3+git20220330.1.80c2621-1) UNRELEASED; urgency=low
+
+  * New upstream snapshot.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Fri, 18 Nov 2022 10:58:41 -0000
+
 r-cran-magrittr (2.0.3-1) unstable; urgency=medium
 
   * Disable reprotest
diff --git a/inst/doc/magrittr.html b/inst/doc/magrittr.html
index a4d5a96..facb189 100644
--- a/inst/doc/magrittr.html
+++ b/inst/doc/magrittr.html
@@ -15,7 +15,19 @@
 
 <title>Introducing magrittr</title>
 
-<script src="data:application/javascript;base64,Ly8gUGFuZG9jIDIuOSBhZGRzIGF0dHJpYnV0ZXMgb24gYm90aCBoZWFkZXIgYW5kIGRpdi4gV2UgcmVtb3ZlIHRoZSBmb3JtZXIgKHRvCi8vIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgYmVoYXZpb3Igb2YgUGFuZG9jIDwgMi44KS4KZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKGUpIHsKICB2YXIgaHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJkaXYuc2VjdGlvbltjbGFzcyo9J2xldmVsJ10gPiA6Zmlyc3QtY2hpbGQiKTsKICB2YXIgaSwgaCwgYTsKICBmb3IgKGkgPSAwOyBpIDwgaHMubGVuZ3RoOyBpKyspIHsKICAgIGggPSBoc1tpXTsKICAgIGlmICghL15oWzEtNl0kL2kudGVzdChoLnRhZ05hbWUpKSBjb250aW51ZTsgIC8vIGl0IHNob3VsZCBiZSBhIGhlYWRlciBoMS1oNgogICAgYSA9IGguYXR0cmlidXRlczsKICAgIHdoaWxlIChhLmxlbmd0aCA+IDApIGgucmVtb3ZlQXR0cmlidXRlKGFbMF0ubmFtZSk7CiAgfQp9KTsK"></script>
+<script>// Pandoc 2.9 adds attributes on both header and div. We remove the former (to
+// be compatible with the behavior of Pandoc < 2.8).
+document.addEventListener('DOMContentLoaded', function(e) {
+  var hs = document.querySelectorAll("div.section[class*='level'] > :first-child");
+  var i, h, a;
+  for (i = 0; i < hs.length; i++) {
+    h = hs[i];
+    if (!/^h[1-6]$/i.test(h.tagName)) continue;  // it should be a header h1-h6
+    a = h.attributes;
+    while (a.length > 0) h.removeAttribute(a[0].name);
+  }
+});
+</script>
 
 <style type="text/css">
   code{white-space: pre-wrap;}
@@ -75,7 +87,7 @@ code span.al { color: #ff0000; font-weight: bold; } /* Alert */
 code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
 code span.at { color: #7d9029; } /* Attribute */
 code span.bn { color: #40a070; } /* BaseN */
-code span.bu { } /* BuiltIn */
+code span.bu { color: #008000; } /* BuiltIn */
 code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
 code span.ch { color: #4070a0; } /* Char */
 code span.cn { color: #880000; } /* Constant */
@@ -88,7 +100,7 @@ code span.er { color: #ff0000; font-weight: bold; } /* Error */
 code span.ex { } /* Extension */
 code span.fl { color: #40a070; } /* Float */
 code span.fu { color: #06287e; } /* Function */
-code span.im { } /* Import */
+code span.im { color: #008000; font-weight: bold; } /* Import */
 code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
 code span.kw { color: #007020; font-weight: bold; } /* Keyword */
 code span.op { color: #666666; } /* Operator */
@@ -109,13 +121,20 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni
   for (var i = 0; i < sheets.length; i++) {
     if (sheets[i].ownerNode.dataset["origin"] !== "pandoc") continue;
     try { var rules = sheets[i].cssRules; } catch (e) { continue; }
-    for (var j = 0; j < rules.length; j++) {
+    var j = 0;
+    while (j < rules.length) {
       var rule = rules[j];
       // check if there is a div.sourceCode rule
-      if (rule.type !== rule.STYLE_RULE || rule.selectorText !== "div.sourceCode") continue;
+      if (rule.type !== rule.STYLE_RULE || rule.selectorText !== "div.sourceCode") {
+        j++;
+        continue;
+      }
       var style = rule.style.cssText;
       // check if color or background-color is set
-      if (rule.style.color === '' && rule.style.backgroundColor === '') continue;
+      if (rule.style.color === '' && rule.style.backgroundColor === '') {
+        j++;
+        continue;
+      }
       // replace div.sourceCode by a pre.sourceCode rule
       sheets[i].deleteRule(j);
       sheets[i].insertRule('pre.sourceCode{' + style + '}', j);
@@ -127,7 +146,187 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni
 
 
 
-<link rel="stylesheet" href="data:text/css,body%20%7B%0Abackground%2Dcolor%3A%20%23fff%3B%0Amargin%3A%201em%20auto%3B%0Amax%2Dwidth%3A%20700px%3B%0Aoverflow%3A%20visible%3B%0Apadding%2Dleft%3A%202em%3B%0Apadding%2Dright%3A%202em%3B%0Afont%2Dfamily%3A%20%22Open%20Sans%22%2C%20%22Helvetica%20Neue%22%2C%20Helvetica%2C%20Arial%2C%20sans%2Dserif%3B%0Afont%2Dsize%3A%2014px%3B%0Aline%2Dheight%3A%201%2E35%3B%0A%7D%0A%23TOC%20%7B%0Aclear%3A%20both%3B%0Amargin%3A%200%200%2010px%2010px%3B%0Apadding%3A%204px%3B%0Awidth%3A%20400px%3B%0Aborder%3A%201px%20solid%20%23CCCCCC%3B%0Aborder%2Dradius%3A%205px%3B%0Abackground%2Dcolor%3A%20%23f6f6f6%3B%0Afont%2Dsize%3A%2013px%3B%0Aline%2Dheight%3A%201%2E3%3B%0A%7D%0A%23TOC%20%2Etoctitle%20%7B%0Afont%2Dweight%3A%20bold%3B%0Afont%2Dsize%3A%2015px%3B%0Amargin%2Dleft%3A%205px%3B%0A%7D%0A%23TOC%20ul%20%7B%0Apadding%2Dleft%3A%2040px%3B%0Amargin%2Dleft%3A%20%2D1%2E5em%3B%0Amargin%2Dtop%3A%205px%3B%0Amargin%2Dbottom%3A%205px%3B%0A%7D%0A%23TOC%20ul%20ul%20%7B%0Amargin%2Dleft%3A%20%2D2em%3B%0A%7D%0A%23TOC%20li%20%7B%0Aline%2Dheight%3A%2016px%3B%0A%7D%0Atable%20%7B%0Amargin%3A%201em%20auto%3B%0Aborder%2Dwidth%3A%201px%3B%0Aborder%2Dcolor%3A%20%23DDDDDD%3B%0Aborder%2Dstyle%3A%20outset%3B%0Aborder%2Dcollapse%3A%20collapse%3B%0A%7D%0Atable%20th%20%7B%0Aborder%2Dwidth%3A%202px%3B%0Apadding%3A%205px%3B%0Aborder%2Dstyle%3A%20inset%3B%0A%7D%0Atable%20td%20%7B%0Aborder%2Dwidth%3A%201px%3B%0Aborder%2Dstyle%3A%20inset%3B%0Aline%2Dheight%3A%2018px%3B%0Apadding%3A%205px%205px%3B%0A%7D%0Atable%2C%20table%20th%2C%20table%20td%20%7B%0Aborder%2Dleft%2Dstyle%3A%20none%3B%0Aborder%2Dright%2Dstyle%3A%20none%3B%0A%7D%0Atable%20thead%2C%20table%20tr%2Eeven%20%7B%0Abackground%2Dcolor%3A%20%23f7f7f7%3B%0A%7D%0Ap%20%7B%0Amargin%3A%200%2E5em%200%3B%0A%7D%0Ablockquote%20%7B%0Abackground%2Dcolor%3A%20%23f6f6f6%3B%0Apadding%3A%200%2E25em%200%2E75em%3B%0A%7D%0Ahr%20%7B%0Aborder%2Dstyle%3A%20solid%3B%0Aborder%3A%20none%3B%0Aborder%2Dtop%3A%201px%20solid%20%23777%3B%0Amargin%3A%2028px%200%3B%0A%7D%0Adl%20%7B%0Amargin%2Dleft%3A%200%3B%0A%7D%0Adl%20dd%20%7B%0Amargin%2Dbottom%3A%2013px%3B%0Amargin%2Dleft%3A%2013px%3B%0A%7D%0Adl%20dt%20%7B%0Afont%2Dweight%3A%20bold%3B%0A%7D%0Aul%20%7B%0Amargin%2Dtop%3A%200%3B%0A%7D%0Aul%20li%20%7B%0Alist%2Dstyle%3A%20circle%20outside%3B%0A%7D%0Aul%20ul%20%7B%0Amargin%2Dbottom%3A%200%3B%0A%7D%0Apre%2C%20code%20%7B%0Abackground%2Dcolor%3A%20%23f7f7f7%3B%0Aborder%2Dradius%3A%203px%3B%0Acolor%3A%20%23333%3B%0Awhite%2Dspace%3A%20pre%2Dwrap%3B%20%0A%7D%0Apre%20%7B%0Aborder%2Dradius%3A%203px%3B%0Amargin%3A%205px%200px%2010px%200px%3B%0Apadding%3A%2010px%3B%0A%7D%0Apre%3Anot%28%5Bclass%5D%29%20%7B%0Abackground%2Dcolor%3A%20%23f7f7f7%3B%0A%7D%0Acode%20%7B%0Afont%2Dfamily%3A%20Consolas%2C%20Monaco%2C%20%27Courier%20New%27%2C%20monospace%3B%0Afont%2Dsize%3A%2085%25%3B%0A%7D%0Ap%20%3E%20code%2C%20li%20%3E%20code%20%7B%0Apadding%3A%202px%200px%3B%0A%7D%0Adiv%2Efigure%20%7B%0Atext%2Dalign%3A%20center%3B%0A%7D%0Aimg%20%7B%0Abackground%2Dcolor%3A%20%23FFFFFF%3B%0Apadding%3A%202px%3B%0Aborder%3A%201px%20solid%20%23DDDDDD%3B%0Aborder%2Dradius%3A%203px%3B%0Aborder%3A%201px%20solid%20%23CCCCCC%3B%0Amargin%3A%200%205px%3B%0A%7D%0Ah1%20%7B%0Amargin%2Dtop%3A%200%3B%0Afont%2Dsize%3A%2035px%3B%0Aline%2Dheight%3A%2040px%3B%0A%7D%0Ah2%20%7B%0Aborder%2Dbottom%3A%204px%20solid%20%23f7f7f7%3B%0Apadding%2Dtop%3A%2010px%3B%0Apadding%2Dbottom%3A%202px%3B%0Afont%2Dsize%3A%20145%25%3B%0A%7D%0Ah3%20%7B%0Aborder%2Dbottom%3A%202px%20solid%20%23f7f7f7%3B%0Apadding%2Dtop%3A%2010px%3B%0Afont%2Dsize%3A%20120%25%3B%0A%7D%0Ah4%20%7B%0Aborder%2Dbottom%3A%201px%20solid%20%23f7f7f7%3B%0Amargin%2Dleft%3A%208px%3B%0Afont%2Dsize%3A%20105%25%3B%0A%7D%0Ah5%2C%20h6%20%7B%0Aborder%2Dbottom%3A%201px%20solid%20%23ccc%3B%0Afont%2Dsize%3A%20105%25%3B%0A%7D%0Aa%20%7B%0Acolor%3A%20%230033dd%3B%0Atext%2Ddecoration%3A%20none%3B%0A%7D%0Aa%3Ahover%20%7B%0Acolor%3A%20%236666ff%3B%20%7D%0Aa%3Avisited%20%7B%0Acolor%3A%20%23800080%3B%20%7D%0Aa%3Avisited%3Ahover%20%7B%0Acolor%3A%20%23BB00BB%3B%20%7D%0Aa%5Bhref%5E%3D%22http%3A%22%5D%20%7B%0Atext%2Ddecoration%3A%20underline%3B%20%7D%0Aa%5Bhref%5E%3D%22https%3A%22%5D%20%7B%0Atext%2Ddecoration%3A%20underline%3B%20%7D%0A%0Acode%20%3E%20span%2Ekw%20%7B%20color%3A%20%23555%3B%20font%2Dweight%3A%20bold%3B%20%7D%20%0Acode%20%3E%20span%2Edt%20%7B%20color%3A%20%23902000%3B%20%7D%20%0Acode%20%3E%20span%2Edv%20%7B%20color%3A%20%2340a070%3B%20%7D%20%0Acode%20%3E%20span%2Ebn%20%7B%20color%3A%20%23d14%3B%20%7D%20%0Acode%20%3E%20span%2Efl%20%7B%20color%3A%20%23d14%3B%20%7D%20%0Acode%20%3E%20span%2Ech%20%7B%20color%3A%20%23d14%3B%20%7D%20%0Acode%20%3E%20span%2Est%20%7B%20color%3A%20%23d14%3B%20%7D%20%0Acode%20%3E%20span%2Eco%20%7B%20color%3A%20%23888888%3B%20font%2Dstyle%3A%20italic%3B%20%7D%20%0Acode%20%3E%20span%2Eot%20%7B%20color%3A%20%23007020%3B%20%7D%20%0Acode%20%3E%20span%2Eal%20%7B%20color%3A%20%23ff0000%3B%20font%2Dweight%3A%20bold%3B%20%7D%20%0Acode%20%3E%20span%2Efu%20%7B%20color%3A%20%23900%3B%20font%2Dweight%3A%20bold%3B%20%7D%20%0Acode%20%3E%20span%2Eer%20%7B%20color%3A%20%23a61717%3B%20background%2Dcolor%3A%20%23e3d2d2%3B%20%7D%20%0A" type="text/css" />
+<style type="text/css">body {
+background-color: #fff;
+margin: 1em auto;
+max-width: 700px;
+overflow: visible;
+padding-left: 2em;
+padding-right: 2em;
+font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
+font-size: 14px;
+line-height: 1.35;
+}
+#TOC {
+clear: both;
+margin: 0 0 10px 10px;
+padding: 4px;
+width: 400px;
+border: 1px solid #CCCCCC;
+border-radius: 5px;
+background-color: #f6f6f6;
+font-size: 13px;
+line-height: 1.3;
+}
+#TOC .toctitle {
+font-weight: bold;
+font-size: 15px;
+margin-left: 5px;
+}
+#TOC ul {
+padding-left: 40px;
+margin-left: -1.5em;
+margin-top: 5px;
+margin-bottom: 5px;
+}
+#TOC ul ul {
+margin-left: -2em;
+}
+#TOC li {
+line-height: 16px;
+}
+table {
+margin: 1em auto;
+border-width: 1px;
+border-color: #DDDDDD;
+border-style: outset;
+border-collapse: collapse;
+}
+table th {
+border-width: 2px;
+padding: 5px;
+border-style: inset;
+}
+table td {
+border-width: 1px;
+border-style: inset;
+line-height: 18px;
+padding: 5px 5px;
+}
+table, table th, table td {
+border-left-style: none;
+border-right-style: none;
+}
+table thead, table tr.even {
+background-color: #f7f7f7;
+}
+p {
+margin: 0.5em 0;
+}
+blockquote {
+background-color: #f6f6f6;
+padding: 0.25em 0.75em;
+}
+hr {
+border-style: solid;
+border: none;
+border-top: 1px solid #777;
+margin: 28px 0;
+}
+dl {
+margin-left: 0;
+}
+dl dd {
+margin-bottom: 13px;
+margin-left: 13px;
+}
+dl dt {
+font-weight: bold;
+}
+ul {
+margin-top: 0;
+}
+ul li {
+list-style: circle outside;
+}
+ul ul {
+margin-bottom: 0;
+}
+pre, code {
+background-color: #f7f7f7;
+border-radius: 3px;
+color: #333;
+white-space: pre-wrap; 
+}
+pre {
+border-radius: 3px;
+margin: 5px 0px 10px 0px;
+padding: 10px;
+}
+pre:not([class]) {
+background-color: #f7f7f7;
+}
+code {
+font-family: Consolas, Monaco, 'Courier New', monospace;
+font-size: 85%;
+}
+p > code, li > code {
+padding: 2px 0px;
+}
+div.figure {
+text-align: center;
+}
+img {
+background-color: #FFFFFF;
+padding: 2px;
+border: 1px solid #DDDDDD;
+border-radius: 3px;
+border: 1px solid #CCCCCC;
+margin: 0 5px;
+}
+h1 {
+margin-top: 0;
+font-size: 35px;
+line-height: 40px;
+}
+h2 {
+border-bottom: 4px solid #f7f7f7;
+padding-top: 10px;
+padding-bottom: 2px;
+font-size: 145%;
+}
+h3 {
+border-bottom: 2px solid #f7f7f7;
+padding-top: 10px;
+font-size: 120%;
+}
+h4 {
+border-bottom: 1px solid #f7f7f7;
+margin-left: 8px;
+font-size: 105%;
+}
+h5, h6 {
+border-bottom: 1px solid #ccc;
+font-size: 105%;
+}
+a {
+color: #0033dd;
+text-decoration: none;
+}
+a:hover {
+color: #6666ff; }
+a:visited {
+color: #800080; }
+a:visited:hover {
+color: #BB00BB; }
+a[href^="http:"] {
+text-decoration: underline; }
+a[href^="https:"] {
+text-decoration: underline; }
+
+code > span.kw { color: #555; font-weight: bold; } 
+code > span.dt { color: #902000; } 
+code > span.dv { color: #40a070; } 
+code > span.bn { color: #d14; } 
+code > span.fl { color: #d14; } 
+code > span.ch { color: #d14; } 
+code > span.st { color: #d14; } 
+code > span.co { color: #888888; font-style: italic; } 
+code > span.ot { color: #007020; } 
+code > span.al { color: #ff0000; font-weight: bold; } 
+code > span.fu { color: #900; font-weight: bold; } 
+code > span.er { color: #a61717; background-color: #e3d2d2; } 
+</style>
 
 
 
@@ -147,14 +346,30 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni
 
 <div id="abstract" class="section level1">
 <h1>Abstract</h1>
-<p>The <em>magrittr</em> (to be pronounced with a sophisticated french accent) package has two aims: decrease development time and improve readability and maintainability of code. Or even shortr: make your code smokin’ (puff puff)!</p>
-<p>To achieve its humble aims, <em>magrittr</em> (remember the accent) provides a new “pipe”-like operator, <code>%&gt;%</code>, with which you may pipe a value forward into an expression or function call; something along the lines of <code>x %&gt;% f</code>, rather than <code>f(x)</code>. This is not an unknown feature elsewhere; a prime example is the <code>|&gt;</code> operator used extensively in <code>F#</code> (to say the least) and indeed this – along with Unix pipes – served as a motivation for developing the magrittr package.</p>
-<p>This vignette describes the main features of <em>magrittr</em> and demonstrates some features which have been added since the initial release.</p>
+<p>The <em>magrittr</em> (to be pronounced with a sophisticated french
+accent) package has two aims: decrease development time and improve
+readability and maintainability of code. Or even shortr: make your code
+smokin’ (puff puff)!</p>
+<p>To achieve its humble aims, <em>magrittr</em> (remember the accent)
+provides a new “pipe”-like operator, <code>%&gt;%</code>, with which you
+may pipe a value forward into an expression or function call; something
+along the lines of <code>x %&gt;% f</code>, rather than
+<code>f(x)</code>. This is not an unknown feature elsewhere; a prime
+example is the <code>|&gt;</code> operator used extensively in
+<code>F#</code> (to say the least) and indeed this – along with Unix
+pipes – served as a motivation for developing the magrittr package.</p>
+<p>This vignette describes the main features of <em>magrittr</em> and
+demonstrates some features which have been added since the initial
+release.</p>
 </div>
 <div id="introduction-and-basics" class="section level1">
 <h1>Introduction and basics</h1>
-<p>At first encounter, you may wonder whether an operator such as <code>%&gt;%</code> can really be all that beneficial; but as you may notice, it semantically changes your code in a way that makes it more intuitive to both read and write.</p>
-<p>Consider the following example, in which the <code>mtcars</code> dataset shipped with R is munged a little:</p>
+<p>At first encounter, you may wonder whether an operator such as
+<code>%&gt;%</code> can really be all that beneficial; but as you may
+notice, it semantically changes your code in a way that makes it more
+intuitive to both read and write.</p>
+<p>Consider the following example, in which the <code>mtcars</code>
+dataset shipped with R is munged a little:</p>
 <div class="sourceCode" id="cb1"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="fu">library</span>(magrittr)</span>
 <span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a></span>
 <span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a>car_data <span class="ot">&lt;-</span> </span>
@@ -167,27 +382,64 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni
 <span id="cb1-10"><a href="#cb1-10" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; 1   4 25.90 108.05 111.00 3.94 2.15 17.75 1.00 1.00 4.50 2.00 11.010090</span></span>
 <span id="cb1-11"><a href="#cb1-11" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; 2   6 19.74 183.31 122.29 3.59 3.12 17.98 0.57 0.43 3.86 3.43  8.391474</span></span>
 <span id="cb1-12"><a href="#cb1-12" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; 3   8 15.10 353.10 209.21 3.23 4.00 16.77 0.00 0.14 3.29 3.50  6.419010</span></span></code></pre></div>
-<p>We start with a value, here <code>mtcars</code> (a <code>data.frame</code>). From there, we extract a subset, aggregate the information based on the number of cylinders, and then transform the dataset by adding a variable for kilometers per liter as a supplement to miles per gallon. Finally we print the result before assigning it. Note how the code is arranged in the logical order of how you think about the task: data-&gt;transform-&gt;aggregate, which is also the same order as the code will execute. It’s like a recipe – easy to read, easy to follow!</p>
+<p>We start with a value, here <code>mtcars</code> (a
+<code>data.frame</code>). From there, we extract a subset, aggregate the
+information based on the number of cylinders, and then transform the
+dataset by adding a variable for kilometers per liter as a supplement to
+miles per gallon. Finally we print the result before assigning it. Note
+how the code is arranged in the logical order of how you think about the
+task: data-&gt;transform-&gt;aggregate, which is also the same order as
+the code will execute. It’s like a recipe – easy to read, easy to
+follow!</p>
 <p>A horrific alternative would be to write:</p>
 <div class="sourceCode" id="cb2"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a>car_data <span class="ot">&lt;-</span> </span>
 <span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a>  <span class="fu">transform</span>(<span class="fu">aggregate</span>(. <span class="sc">~</span> cyl, </span>
 <span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a>                      <span class="at">data =</span> <span class="fu">subset</span>(mtcars, hp <span class="sc">&gt;</span> <span class="dv">100</span>), </span>
 <span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a>                      <span class="at">FUN =</span> <span class="cf">function</span>(x) <span class="fu">round</span>(<span class="fu">mean</span>(x), <span class="dv">2</span>)), </span>
 <span id="cb2-5"><a href="#cb2-5" aria-hidden="true" tabindex="-1"></a>            <span class="at">kpl =</span> mpg<span class="sc">*</span><span class="fl">0.4251</span>)</span></code></pre></div>
-<p>There is a lot more clutter with parentheses, and the mental task of deciphering the code is more challenging—particularly if you did not write it yourself.</p>
-<p>Note also how “building” a function on the fly for use in <code>aggregate</code> is very simple in <em>magrittr</em>: rather than an actual value as the left-hand side in the pipeline, just use the placeholder. This is also very useful in R’s <code>*apply</code> family of functions.</p>
-<p>Granted, you may make the second example better, perhaps throw in a few temporary variables (which is often avoided to some degree when using <em>magrittr</em>), but one often sees cluttered lines like the ones presented.</p>
-<p>And here is another selling point: suppose I want to quickly add another step somewhere in the process. This is very easy to do in the pipeline version, but a little more challenging in the “standard” example.</p>
-<p>The combined example shows a few neat features of the pipe (which it is not):</p>
+<p>There is a lot more clutter with parentheses, and the mental task of
+deciphering the code is more challenging—particularly if you did not
+write it yourself.</p>
+<p>Note also how “building” a function on the fly for use in
+<code>aggregate</code> is very simple in <em>magrittr</em>: rather than
+an actual value as the left-hand side in the pipeline, just use the
+placeholder. This is also very useful in R’s <code>*apply</code> family
+of functions.</p>
+<p>Granted, you may make the second example better, perhaps throw in a
+few temporary variables (which is often avoided to some degree when
+using <em>magrittr</em>), but one often sees cluttered lines like the
+ones presented.</p>
+<p>And here is another selling point: suppose I want to quickly add
+another step somewhere in the process. This is very easy to do in the
+pipeline version, but a little more challenging in the “standard”
+example.</p>
+<p>The combined example shows a few neat features of the pipe (which it
+is not):</p>
 <ol style="list-style-type: decimal">
-<li>By default the left-hand side (LHS) will be <em>piped in</em> as the first argument of the function appearing on the right-hand side (RHS). This is the case in the <code>subset</code> and <code>transform</code> expressions.</li>
-<li><code>%&gt;%</code> may be used in a nested fashion, e.g. it may appear in expressions within arguments. This is illustrated in the <code>mpg</code> to <code>kpl</code> conversion.</li>
-<li>When the LHS is needed at a position other than the first, one can use the dot,<code>&#39;.&#39;</code>, as placeholder. This is shown in the <code>aggregate</code> expression.</li>
-<li>The dot in e.g. a formula is <em>not</em> confused with a placeholder, which is utilized in the <code>aggregate</code> expression.</li>
-<li>Whenever only <em>one</em> argument (the LHS) is needed, one can omit the empty parentheses. This is shown in the call to <code>print</code> (which also returns its argument). Here, <code>LHS %&gt;% print()</code>, or even <code>LHS %&gt;% print(.)</code> would also work.</li>
-<li>A pipeline with a dot (<code>.</code>) as the LHS will create a unary function. This is used to define the aggregator function.</li>
+<li>By default the left-hand side (LHS) will be <em>piped in</em> as the
+first argument of the function appearing on the right-hand side (RHS).
+This is the case in the <code>subset</code> and <code>transform</code>
+expressions.</li>
+<li><code>%&gt;%</code> may be used in a nested fashion, e.g. it may
+appear in expressions within arguments. This is illustrated in the
+<code>mpg</code> to <code>kpl</code> conversion.</li>
+<li>When the LHS is needed at a position other than the first, one can
+use the dot,<code>&#39;.&#39;</code>, as placeholder. This is shown in the
+<code>aggregate</code> expression.</li>
+<li>The dot in e.g. a formula is <em>not</em> confused with a
+placeholder, which is utilized in the <code>aggregate</code>
+expression.</li>
+<li>Whenever only <em>one</em> argument (the LHS) is needed, one can
+omit the empty parentheses. This is shown in the call to
+<code>print</code> (which also returns its argument). Here,
+<code>LHS %&gt;% print()</code>, or even
+<code>LHS %&gt;% print(.)</code> would also work.</li>
+<li>A pipeline with a dot (<code>.</code>) as the LHS will create a
+unary function. This is used to define the aggregator function.</li>
 </ol>
-<p>One feature, which was not demonstrated above is piping into <em>anonymous functions</em>, or <em>lambdas</em>. This is possible using standard function definitions, e.g.:</p>
+<p>One feature, which was not demonstrated above is piping into
+<em>anonymous functions</em>, or <em>lambdas</em>. This is possible
+using standard function definitions, e.g.:</p>
 <div class="sourceCode" id="cb3"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a>car_data <span class="sc">%&gt;%</span></span>
 <span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a>(<span class="cf">function</span>(x) {</span>
 <span id="cb3-3"><a href="#cb3-3" aria-hidden="true" tabindex="-1"></a>  <span class="cf">if</span> (<span class="fu">nrow</span>(x) <span class="sc">&gt;</span> <span class="dv">2</span>) </span>
@@ -204,31 +456,56 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni
 <span id="cb4-7"><a href="#cb4-7" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt;   cyl  mpg   disp     hp drat   wt  qsec vs   am gear carb      kpl</span></span>
 <span id="cb4-8"><a href="#cb4-8" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; 1   4 25.9 108.05 111.00 3.94 2.15 17.75  1 1.00 4.50  2.0 11.01009</span></span>
 <span id="cb4-9"><a href="#cb4-9" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; 3   8 15.1 353.10 209.21 3.23 4.00 16.77  0 0.14 3.29  3.5  6.41901</span></span></code></pre></div>
-<p>Since all right-hand sides are really “body expressions” of unary functions, this is only the natural extension of the simple right-hand side expressions. Of course, longer and more complex functions can be made using this approach.</p>
-<p>In the first example, the anonymous function is enclosed in parentheses. Whenever you want to use a function- or call-generating statement as right-hand side, parentheses are used to evaluate the right-hand side before piping takes place.</p>
+<p>Since all right-hand sides are really “body expressions” of unary
+functions, this is only the natural extension of the simple right-hand
+side expressions. Of course, longer and more complex functions can be
+made using this approach.</p>
+<p>In the first example, the anonymous function is enclosed in
+parentheses. Whenever you want to use a function- or call-generating
+statement as right-hand side, parentheses are used to evaluate the
+right-hand side before piping takes place.</p>
 <p>Another, less useful example is:</p>
 <div class="sourceCode" id="cb5"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a><span class="dv">1</span><span class="sc">:</span><span class="dv">10</span> <span class="sc">%&gt;%</span> (<span class="fu">substitute</span>(<span class="fu">f</span>(), <span class="fu">list</span>(<span class="at">f =</span> sum)))</span>
 <span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; [1] 55</span></span></code></pre></div>
 </div>
 <div id="additional-pipe-operators" class="section level1">
 <h1>Additional pipe operators</h1>
-<p><em>magrittr</em> also provides three related pipe operators. These are not as common as <code>%&gt;%</code> but they become useful in special cases.</p>
-<p>The “tee” pipe, <code>%T&gt;%</code> works like <code>%&gt;%</code>, except it returns the left-hand side value, and not the result of the right-hand side operation. This is useful when a step in a pipeline is used for its side-effect (printing, plotting, logging, etc.). As an example (where the actual plot is omitted here):</p>
+<p><em>magrittr</em> also provides three related pipe operators. These
+are not as common as <code>%&gt;%</code> but they become useful in
+special cases.</p>
+<p>The “tee” pipe, <code>%T&gt;%</code> works like <code>%&gt;%</code>,
+except it returns the left-hand side value, and not the result of the
+right-hand side operation. This is useful when a step in a pipeline is
+used for its side-effect (printing, plotting, logging, etc.). As an
+example (where the actual plot is omitted here):</p>
 <div class="sourceCode" id="cb6"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a><span class="fu">rnorm</span>(<span class="dv">200</span>) <span class="sc">%&gt;%</span></span>
 <span id="cb6-2"><a href="#cb6-2" aria-hidden="true" tabindex="-1"></a><span class="fu">matrix</span>(<span class="at">ncol =</span> <span class="dv">2</span>) <span class="sc">%T&gt;%</span></span>
 <span id="cb6-3"><a href="#cb6-3" aria-hidden="true" tabindex="-1"></a>plot <span class="sc">%&gt;%</span> <span class="co"># plot usually does not return anything. </span></span>
 <span id="cb6-4"><a href="#cb6-4" aria-hidden="true" tabindex="-1"></a>colSums</span>
-<span id="cb6-5"><a href="#cb6-5" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; [1]  -4.018676 -27.018219</span></span></code></pre></div>
-<p>The “exposition” pipe, <code>%$%</code> exposes the names within the left-hand side object to the right-hand side expression. Essentially, it is a short-hand for using the <code>with</code> functions (and the same left-hand side objects are accepted). This operator is handy when functions do not themselves have a data argument, as for example <code>lm</code> and <code>aggregate</code> do. Here are a few examples as illustration:</p>
+<span id="cb6-5"><a href="#cb6-5" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; [1] -6.6604983  0.5044741</span></span></code></pre></div>
+<p>The “exposition” pipe, <code>%$%</code> exposes the names within the
+left-hand side object to the right-hand side expression. Essentially, it
+is a short-hand for using the <code>with</code> functions (and the same
+left-hand side objects are accepted). This operator is handy when
+functions do not themselves have a data argument, as for example
+<code>lm</code> and <code>aggregate</code> do. Here are a few examples
+as illustration:</p>
 <div class="sourceCode" id="cb7"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a>iris <span class="sc">%&gt;%</span></span>
 <span id="cb7-2"><a href="#cb7-2" aria-hidden="true" tabindex="-1"></a>  <span class="fu">subset</span>(Sepal.Length <span class="sc">&gt;</span> <span class="fu">mean</span>(Sepal.Length)) <span class="sc">%$%</span></span>
 <span id="cb7-3"><a href="#cb7-3" aria-hidden="true" tabindex="-1"></a>  <span class="fu">cor</span>(Sepal.Length, Sepal.Width)</span>
 <span id="cb7-4"><a href="#cb7-4" aria-hidden="true" tabindex="-1"></a>   </span>
 <span id="cb7-5"><a href="#cb7-5" aria-hidden="true" tabindex="-1"></a><span class="fu">data.frame</span>(<span class="at">z =</span> <span class="fu">rnorm</span>(<span class="dv">100</span>)) <span class="sc">%$%</span> </span>
 <span id="cb7-6"><a href="#cb7-6" aria-hidden="true" tabindex="-1"></a>  <span class="fu">ts.plot</span>(z)</span></code></pre></div>
-<p>Finally, the “assignment” pipe <code>%&lt;&gt;%</code> can be used as the first pipe in a chain. The effect will be that the result of the pipeline is assigned to the left-hand side object, rather than returning the result as usual. It is essentially shorthand notation for expressions like <code>foo &lt;- foo %&gt;% bar %&gt;% baz</code>, which boils down to <code>foo %&lt;&gt;% bar %&gt;% baz</code>. Another example is:</p>
+<p>Finally, the “assignment” pipe <code>%&lt;&gt;%</code> can be used as
+the first pipe in a chain. The effect will be that the result of the
+pipeline is assigned to the left-hand side object, rather than returning
+the result as usual. It is essentially shorthand notation for
+expressions like <code>foo &lt;- foo %&gt;% bar %&gt;% baz</code>, which
+boils down to <code>foo %&lt;&gt;% bar %&gt;% baz</code>. Another
+example is:</p>
 <div class="sourceCode" id="cb8"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a>iris<span class="sc">$</span>Sepal.Length <span class="sc">%&lt;&gt;%</span> sqrt</span></code></pre></div>
-<p>The <code>%&lt;&gt;%</code> can be used whenever <code>expr &lt;- ...</code> makes sense, e.g. </p>
+<p>The <code>%&lt;&gt;%</code> can be used whenever
+<code>expr &lt;- ...</code> makes sense, e.g. </p>
 <ul>
 <li><code>x %&lt;&gt;% foo %&gt;% bar</code></li>
 <li><code>x[1:10] %&lt;&gt;% foo %&gt;% bar</code></li>
@@ -237,7 +514,10 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni
 </div>
 <div id="aliases" class="section level1">
 <h1>Aliases</h1>
-<p>In addition to the <code>%&gt;%</code>-operator, <em>magrittr</em> provides some aliases for other operators which make operations such as addition or multiplication fit well into the <em>magrittr</em>-syntax. As an example, consider:</p>
+<p>In addition to the <code>%&gt;%</code>-operator, <em>magrittr</em>
+provides some aliases for other operators which make operations such as
+addition or multiplication fit well into the <em>magrittr</em>-syntax.
+As an example, consider:</p>
 <div class="sourceCode" id="cb9"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a><span class="fu">rnorm</span>(<span class="dv">1000</span>)    <span class="sc">%&gt;%</span></span>
 <span id="cb9-2"><a href="#cb9-2" aria-hidden="true" tabindex="-1"></a><span class="fu">multiply_by</span>(<span class="dv">5</span>) <span class="sc">%&gt;%</span></span>
 <span id="cb9-3"><a href="#cb9-3" aria-hidden="true" tabindex="-1"></a><span class="fu">add</span>(<span class="dv">5</span>)         <span class="sc">%&gt;%</span></span>
@@ -246,19 +526,21 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni
 <span id="cb9-6"><a href="#cb9-6" aria-hidden="true" tabindex="-1"></a>       <span class="st">&quot;Variance:&quot;</span>, <span class="fu">var</span>(.), <span class="st">&quot;</span><span class="sc">\n</span><span class="st">&quot;</span>)</span>
 <span id="cb9-7"><a href="#cb9-7" aria-hidden="true" tabindex="-1"></a>   <span class="fu">head</span>(.)</span>
 <span id="cb9-8"><a href="#cb9-8" aria-hidden="true" tabindex="-1"></a>}</span>
-<span id="cb9-9"><a href="#cb9-9" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; Mean: 5.06493 Variance: 27.05389</span></span>
-<span id="cb9-10"><a href="#cb9-10" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; [1]  2.477662 -3.999358  8.624820  5.322125  3.014306 10.204276</span></span></code></pre></div>
+<span id="cb9-9"><a href="#cb9-9" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; Mean: 5.046959 Variance: 23.20006</span></span>
+<span id="cb9-10"><a href="#cb9-10" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; [1]  1.9185684  5.4494074 11.1989152 -0.2633984  6.3938007 15.0330153</span></span></code></pre></div>
 <p>which could be written in more compact form as:</p>
 <div class="sourceCode" id="cb10"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true" tabindex="-1"></a><span class="fu">rnorm</span>(<span class="dv">100</span>) <span class="sc">%&gt;%</span> <span class="st">`</span><span class="at">*</span><span class="st">`</span>(<span class="dv">5</span>) <span class="sc">%&gt;%</span> <span class="st">`</span><span class="at">+</span><span class="st">`</span>(<span class="dv">5</span>) <span class="sc">%&gt;%</span> </span>
 <span id="cb10-2"><a href="#cb10-2" aria-hidden="true" tabindex="-1"></a>{</span>
 <span id="cb10-3"><a href="#cb10-3" aria-hidden="true" tabindex="-1"></a>  <span class="fu">cat</span>(<span class="st">&quot;Mean:&quot;</span>, <span class="fu">mean</span>(.), <span class="st">&quot;Variance:&quot;</span>, <span class="fu">var</span>(.),  <span class="st">&quot;</span><span class="sc">\n</span><span class="st">&quot;</span>)</span>
 <span id="cb10-4"><a href="#cb10-4" aria-hidden="true" tabindex="-1"></a>  <span class="fu">head</span>(.)</span>
 <span id="cb10-5"><a href="#cb10-5" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div>
-<p>To see a list of the aliases, execute e.g. <code>?multiply_by</code>.</p>
+<p>To see a list of the aliases, execute
+e.g. <code>?multiply_by</code>.</p>
 </div>
 <div id="development" class="section level1">
 <h1>Development</h1>
-<p>The <em>magrittr</em> package is also available in a development version at the GitHub development page: <a href="https://github.com/tidyverse/magrittr">github.com/tidyverse/magrittr</a>.</p>
+<p>The <em>magrittr</em> package is also available in a development
+version at the GitHub development page: <a href="https://github.com/tidyverse/magrittr">github.com/tidyverse/magrittr</a>.</p>
 </div>
 
 
diff --git a/inst/doc/tradeoffs.html b/inst/doc/tradeoffs.html
index abcbe22..3c48846 100644
--- a/inst/doc/tradeoffs.html
+++ b/inst/doc/tradeoffs.html
@@ -16,7 +16,19 @@
 
 <title>Design tradeoffs</title>
 
-<script src="data:application/javascript;base64,Ly8gUGFuZG9jIDIuOSBhZGRzIGF0dHJpYnV0ZXMgb24gYm90aCBoZWFkZXIgYW5kIGRpdi4gV2UgcmVtb3ZlIHRoZSBmb3JtZXIgKHRvCi8vIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgYmVoYXZpb3Igb2YgUGFuZG9jIDwgMi44KS4KZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKGUpIHsKICB2YXIgaHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJkaXYuc2VjdGlvbltjbGFzcyo9J2xldmVsJ10gPiA6Zmlyc3QtY2hpbGQiKTsKICB2YXIgaSwgaCwgYTsKICBmb3IgKGkgPSAwOyBpIDwgaHMubGVuZ3RoOyBpKyspIHsKICAgIGggPSBoc1tpXTsKICAgIGlmICghL15oWzEtNl0kL2kudGVzdChoLnRhZ05hbWUpKSBjb250aW51ZTsgIC8vIGl0IHNob3VsZCBiZSBhIGhlYWRlciBoMS1oNgogICAgYSA9IGguYXR0cmlidXRlczsKICAgIHdoaWxlIChhLmxlbmd0aCA+IDApIGgucmVtb3ZlQXR0cmlidXRlKGFbMF0ubmFtZSk7CiAgfQp9KTsK"></script>
+<script>// Pandoc 2.9 adds attributes on both header and div. We remove the former (to
+// be compatible with the behavior of Pandoc < 2.8).
+document.addEventListener('DOMContentLoaded', function(e) {
+  var hs = document.querySelectorAll("div.section[class*='level'] > :first-child");
+  var i, h, a;
+  for (i = 0; i < hs.length; i++) {
+    h = hs[i];
+    if (!/^h[1-6]$/i.test(h.tagName)) continue;  // it should be a header h1-h6
+    a = h.attributes;
+    while (a.length > 0) h.removeAttribute(a[0].name);
+  }
+});
+</script>
 
 <style type="text/css">
   code{white-space: pre-wrap;}
@@ -76,7 +88,7 @@ code span.al { color: #ff0000; font-weight: bold; } /* Alert */
 code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
 code span.at { color: #7d9029; } /* Attribute */
 code span.bn { color: #40a070; } /* BaseN */
-code span.bu { } /* BuiltIn */
+code span.bu { color: #008000; } /* BuiltIn */
 code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
 code span.ch { color: #4070a0; } /* Char */
 code span.cn { color: #880000; } /* Constant */
@@ -89,7 +101,7 @@ code span.er { color: #ff0000; font-weight: bold; } /* Error */
 code span.ex { } /* Extension */
 code span.fl { color: #40a070; } /* Float */
 code span.fu { color: #06287e; } /* Function */
-code span.im { } /* Import */
+code span.im { color: #008000; font-weight: bold; } /* Import */
 code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
 code span.kw { color: #007020; font-weight: bold; } /* Keyword */
 code span.op { color: #666666; } /* Operator */
@@ -110,13 +122,20 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni
   for (var i = 0; i < sheets.length; i++) {
     if (sheets[i].ownerNode.dataset["origin"] !== "pandoc") continue;
     try { var rules = sheets[i].cssRules; } catch (e) { continue; }
-    for (var j = 0; j < rules.length; j++) {
+    var j = 0;
+    while (j < rules.length) {
       var rule = rules[j];
       // check if there is a div.sourceCode rule
-      if (rule.type !== rule.STYLE_RULE || rule.selectorText !== "div.sourceCode") continue;
+      if (rule.type !== rule.STYLE_RULE || rule.selectorText !== "div.sourceCode") {
+        j++;
+        continue;
+      }
       var style = rule.style.cssText;
       // check if color or background-color is set
-      if (rule.style.color === '' && rule.style.backgroundColor === '') continue;
+      if (rule.style.color === '' && rule.style.backgroundColor === '') {
+        j++;
+        continue;
+      }
       // replace div.sourceCode by a pre.sourceCode rule
       sheets[i].deleteRule(j);
       sheets[i].insertRule('pre.sourceCode{' + style + '}', j);
@@ -128,7 +147,187 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni
 
 
 
-<link rel="stylesheet" href="data:text/css,body%20%7B%0Abackground%2Dcolor%3A%20%23fff%3B%0Amargin%3A%201em%20auto%3B%0Amax%2Dwidth%3A%20700px%3B%0Aoverflow%3A%20visible%3B%0Apadding%2Dleft%3A%202em%3B%0Apadding%2Dright%3A%202em%3B%0Afont%2Dfamily%3A%20%22Open%20Sans%22%2C%20%22Helvetica%20Neue%22%2C%20Helvetica%2C%20Arial%2C%20sans%2Dserif%3B%0Afont%2Dsize%3A%2014px%3B%0Aline%2Dheight%3A%201%2E35%3B%0A%7D%0A%23TOC%20%7B%0Aclear%3A%20both%3B%0Amargin%3A%200%200%2010px%2010px%3B%0Apadding%3A%204px%3B%0Awidth%3A%20400px%3B%0Aborder%3A%201px%20solid%20%23CCCCCC%3B%0Aborder%2Dradius%3A%205px%3B%0Abackground%2Dcolor%3A%20%23f6f6f6%3B%0Afont%2Dsize%3A%2013px%3B%0Aline%2Dheight%3A%201%2E3%3B%0A%7D%0A%23TOC%20%2Etoctitle%20%7B%0Afont%2Dweight%3A%20bold%3B%0Afont%2Dsize%3A%2015px%3B%0Amargin%2Dleft%3A%205px%3B%0A%7D%0A%23TOC%20ul%20%7B%0Apadding%2Dleft%3A%2040px%3B%0Amargin%2Dleft%3A%20%2D1%2E5em%3B%0Amargin%2Dtop%3A%205px%3B%0Amargin%2Dbottom%3A%205px%3B%0A%7D%0A%23TOC%20ul%20ul%20%7B%0Amargin%2Dleft%3A%20%2D2em%3B%0A%7D%0A%23TOC%20li%20%7B%0Aline%2Dheight%3A%2016px%3B%0A%7D%0Atable%20%7B%0Amargin%3A%201em%20auto%3B%0Aborder%2Dwidth%3A%201px%3B%0Aborder%2Dcolor%3A%20%23DDDDDD%3B%0Aborder%2Dstyle%3A%20outset%3B%0Aborder%2Dcollapse%3A%20collapse%3B%0A%7D%0Atable%20th%20%7B%0Aborder%2Dwidth%3A%202px%3B%0Apadding%3A%205px%3B%0Aborder%2Dstyle%3A%20inset%3B%0A%7D%0Atable%20td%20%7B%0Aborder%2Dwidth%3A%201px%3B%0Aborder%2Dstyle%3A%20inset%3B%0Aline%2Dheight%3A%2018px%3B%0Apadding%3A%205px%205px%3B%0A%7D%0Atable%2C%20table%20th%2C%20table%20td%20%7B%0Aborder%2Dleft%2Dstyle%3A%20none%3B%0Aborder%2Dright%2Dstyle%3A%20none%3B%0A%7D%0Atable%20thead%2C%20table%20tr%2Eeven%20%7B%0Abackground%2Dcolor%3A%20%23f7f7f7%3B%0A%7D%0Ap%20%7B%0Amargin%3A%200%2E5em%200%3B%0A%7D%0Ablockquote%20%7B%0Abackground%2Dcolor%3A%20%23f6f6f6%3B%0Apadding%3A%200%2E25em%200%2E75em%3B%0A%7D%0Ahr%20%7B%0Aborder%2Dstyle%3A%20solid%3B%0Aborder%3A%20none%3B%0Aborder%2Dtop%3A%201px%20solid%20%23777%3B%0Amargin%3A%2028px%200%3B%0A%7D%0Adl%20%7B%0Amargin%2Dleft%3A%200%3B%0A%7D%0Adl%20dd%20%7B%0Amargin%2Dbottom%3A%2013px%3B%0Amargin%2Dleft%3A%2013px%3B%0A%7D%0Adl%20dt%20%7B%0Afont%2Dweight%3A%20bold%3B%0A%7D%0Aul%20%7B%0Amargin%2Dtop%3A%200%3B%0A%7D%0Aul%20li%20%7B%0Alist%2Dstyle%3A%20circle%20outside%3B%0A%7D%0Aul%20ul%20%7B%0Amargin%2Dbottom%3A%200%3B%0A%7D%0Apre%2C%20code%20%7B%0Abackground%2Dcolor%3A%20%23f7f7f7%3B%0Aborder%2Dradius%3A%203px%3B%0Acolor%3A%20%23333%3B%0Awhite%2Dspace%3A%20pre%2Dwrap%3B%20%0A%7D%0Apre%20%7B%0Aborder%2Dradius%3A%203px%3B%0Amargin%3A%205px%200px%2010px%200px%3B%0Apadding%3A%2010px%3B%0A%7D%0Apre%3Anot%28%5Bclass%5D%29%20%7B%0Abackground%2Dcolor%3A%20%23f7f7f7%3B%0A%7D%0Acode%20%7B%0Afont%2Dfamily%3A%20Consolas%2C%20Monaco%2C%20%27Courier%20New%27%2C%20monospace%3B%0Afont%2Dsize%3A%2085%25%3B%0A%7D%0Ap%20%3E%20code%2C%20li%20%3E%20code%20%7B%0Apadding%3A%202px%200px%3B%0A%7D%0Adiv%2Efigure%20%7B%0Atext%2Dalign%3A%20center%3B%0A%7D%0Aimg%20%7B%0Abackground%2Dcolor%3A%20%23FFFFFF%3B%0Apadding%3A%202px%3B%0Aborder%3A%201px%20solid%20%23DDDDDD%3B%0Aborder%2Dradius%3A%203px%3B%0Aborder%3A%201px%20solid%20%23CCCCCC%3B%0Amargin%3A%200%205px%3B%0A%7D%0Ah1%20%7B%0Amargin%2Dtop%3A%200%3B%0Afont%2Dsize%3A%2035px%3B%0Aline%2Dheight%3A%2040px%3B%0A%7D%0Ah2%20%7B%0Aborder%2Dbottom%3A%204px%20solid%20%23f7f7f7%3B%0Apadding%2Dtop%3A%2010px%3B%0Apadding%2Dbottom%3A%202px%3B%0Afont%2Dsize%3A%20145%25%3B%0A%7D%0Ah3%20%7B%0Aborder%2Dbottom%3A%202px%20solid%20%23f7f7f7%3B%0Apadding%2Dtop%3A%2010px%3B%0Afont%2Dsize%3A%20120%25%3B%0A%7D%0Ah4%20%7B%0Aborder%2Dbottom%3A%201px%20solid%20%23f7f7f7%3B%0Amargin%2Dleft%3A%208px%3B%0Afont%2Dsize%3A%20105%25%3B%0A%7D%0Ah5%2C%20h6%20%7B%0Aborder%2Dbottom%3A%201px%20solid%20%23ccc%3B%0Afont%2Dsize%3A%20105%25%3B%0A%7D%0Aa%20%7B%0Acolor%3A%20%230033dd%3B%0Atext%2Ddecoration%3A%20none%3B%0A%7D%0Aa%3Ahover%20%7B%0Acolor%3A%20%236666ff%3B%20%7D%0Aa%3Avisited%20%7B%0Acolor%3A%20%23800080%3B%20%7D%0Aa%3Avisited%3Ahover%20%7B%0Acolor%3A%20%23BB00BB%3B%20%7D%0Aa%5Bhref%5E%3D%22http%3A%22%5D%20%7B%0Atext%2Ddecoration%3A%20underline%3B%20%7D%0Aa%5Bhref%5E%3D%22https%3A%22%5D%20%7B%0Atext%2Ddecoration%3A%20underline%3B%20%7D%0A%0Acode%20%3E%20span%2Ekw%20%7B%20color%3A%20%23555%3B%20font%2Dweight%3A%20bold%3B%20%7D%20%0Acode%20%3E%20span%2Edt%20%7B%20color%3A%20%23902000%3B%20%7D%20%0Acode%20%3E%20span%2Edv%20%7B%20color%3A%20%2340a070%3B%20%7D%20%0Acode%20%3E%20span%2Ebn%20%7B%20color%3A%20%23d14%3B%20%7D%20%0Acode%20%3E%20span%2Efl%20%7B%20color%3A%20%23d14%3B%20%7D%20%0Acode%20%3E%20span%2Ech%20%7B%20color%3A%20%23d14%3B%20%7D%20%0Acode%20%3E%20span%2Est%20%7B%20color%3A%20%23d14%3B%20%7D%20%0Acode%20%3E%20span%2Eco%20%7B%20color%3A%20%23888888%3B%20font%2Dstyle%3A%20italic%3B%20%7D%20%0Acode%20%3E%20span%2Eot%20%7B%20color%3A%20%23007020%3B%20%7D%20%0Acode%20%3E%20span%2Eal%20%7B%20color%3A%20%23ff0000%3B%20font%2Dweight%3A%20bold%3B%20%7D%20%0Acode%20%3E%20span%2Efu%20%7B%20color%3A%20%23900%3B%20font%2Dweight%3A%20bold%3B%20%7D%20%0Acode%20%3E%20span%2Eer%20%7B%20color%3A%20%23a61717%3B%20background%2Dcolor%3A%20%23e3d2d2%3B%20%7D%20%0A" type="text/css" />
+<style type="text/css">body {
+background-color: #fff;
+margin: 1em auto;
+max-width: 700px;
+overflow: visible;
+padding-left: 2em;
+padding-right: 2em;
+font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
+font-size: 14px;
+line-height: 1.35;
+}
+#TOC {
+clear: both;
+margin: 0 0 10px 10px;
+padding: 4px;
+width: 400px;
+border: 1px solid #CCCCCC;
+border-radius: 5px;
+background-color: #f6f6f6;
+font-size: 13px;
+line-height: 1.3;
+}
+#TOC .toctitle {
+font-weight: bold;
+font-size: 15px;
+margin-left: 5px;
+}
+#TOC ul {
+padding-left: 40px;
+margin-left: -1.5em;
+margin-top: 5px;
+margin-bottom: 5px;
+}
+#TOC ul ul {
+margin-left: -2em;
+}
+#TOC li {
+line-height: 16px;
+}
+table {
+margin: 1em auto;
+border-width: 1px;
+border-color: #DDDDDD;
+border-style: outset;
+border-collapse: collapse;
+}
+table th {
+border-width: 2px;
+padding: 5px;
+border-style: inset;
+}
+table td {
+border-width: 1px;
+border-style: inset;
+line-height: 18px;
+padding: 5px 5px;
+}
+table, table th, table td {
+border-left-style: none;
+border-right-style: none;
+}
+table thead, table tr.even {
+background-color: #f7f7f7;
+}
+p {
+margin: 0.5em 0;
+}
+blockquote {
+background-color: #f6f6f6;
+padding: 0.25em 0.75em;
+}
+hr {
+border-style: solid;
+border: none;
+border-top: 1px solid #777;
+margin: 28px 0;
+}
+dl {
+margin-left: 0;
+}
+dl dd {
+margin-bottom: 13px;
+margin-left: 13px;
+}
+dl dt {
+font-weight: bold;
+}
+ul {
+margin-top: 0;
+}
+ul li {
+list-style: circle outside;
+}
+ul ul {
+margin-bottom: 0;
+}
+pre, code {
+background-color: #f7f7f7;
+border-radius: 3px;
+color: #333;
+white-space: pre-wrap; 
+}
+pre {
+border-radius: 3px;
+margin: 5px 0px 10px 0px;
+padding: 10px;
+}
+pre:not([class]) {
+background-color: #f7f7f7;
+}
+code {
+font-family: Consolas, Monaco, 'Courier New', monospace;
+font-size: 85%;
+}
+p > code, li > code {
+padding: 2px 0px;
+}
+div.figure {
+text-align: center;
+}
+img {
+background-color: #FFFFFF;
+padding: 2px;
+border: 1px solid #DDDDDD;
+border-radius: 3px;
+border: 1px solid #CCCCCC;
+margin: 0 5px;
+}
+h1 {
+margin-top: 0;
+font-size: 35px;
+line-height: 40px;
+}
+h2 {
+border-bottom: 4px solid #f7f7f7;
+padding-top: 10px;
+padding-bottom: 2px;
+font-size: 145%;
+}
+h3 {
+border-bottom: 2px solid #f7f7f7;
+padding-top: 10px;
+font-size: 120%;
+}
+h4 {
+border-bottom: 1px solid #f7f7f7;
+margin-left: 8px;
+font-size: 105%;
+}
+h5, h6 {
+border-bottom: 1px solid #ccc;
+font-size: 105%;
+}
+a {
+color: #0033dd;
+text-decoration: none;
+}
+a:hover {
+color: #6666ff; }
+a:visited {
+color: #800080; }
+a:visited:hover {
+color: #BB00BB; }
+a[href^="http:"] {
+text-decoration: underline; }
+a[href^="https:"] {
+text-decoration: underline; }
+
+code > span.kw { color: #555; font-weight: bold; } 
+code > span.dt { color: #902000; } 
+code > span.dv { color: #40a070; } 
+code > span.bn { color: #d14; } 
+code > span.fl { color: #d14; } 
+code > span.ch { color: #d14; } 
+code > span.st { color: #d14; } 
+code > span.co { color: #888888; font-style: italic; } 
+code > span.ot { color: #007020; } 
+code > span.al { color: #ff0000; font-weight: bold; } 
+code > span.fu { color: #900; font-weight: bold; } 
+code > span.er { color: #a61717; background-color: #e3d2d2; } 
+</style>
 
 
 
@@ -146,28 +345,41 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni
 
 
 
-<p>There are many different ways that magrittr could implement the pipe. The goal of this document is to elucidate the variations, and the various pros and cons of each approach. This document is primarily aimed at the magrittr developers (so we don’t forget about important considerations), but will be of interest to anyone who wants to understand pipes better, or to create their own pipe that makes different tradeoffs</p>
+<p>There are many different ways that magrittr could implement the pipe.
+The goal of this document is to elucidate the variations, and the
+various pros and cons of each approach. This document is primarily aimed
+at the magrittr developers (so we don’t forget about important
+considerations), but will be of interest to anyone who wants to
+understand pipes better, or to create their own pipe that makes
+different tradeoffs</p>
 <div id="code-transformation" class="section level2">
 <h2>Code transformation</h2>
-<p>There are three main options for how we might transform a pipeline in base R expressions. Here they are illustrated with <code>x %&gt;% foo() %&gt;% bar()</code>:</p>
+<p>There are three main options for how we might transform a pipeline in
+base R expressions. Here they are illustrated with
+<code>x %&gt;% foo() %&gt;% bar()</code>:</p>
 <ul>
 <li><p><strong>Nested</strong></p>
 <div class="sourceCode" id="cb1"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="fu">bar</span>(<span class="fu">foo</span>(x))</span></code></pre></div></li>
 <li><p><strong>Eager (mask)</strong>, masking environment</p>
-<p>This is essentially how <code>%&gt;%</code> has been implemented prior to magrittr 2.0:</p>
+<p>This is essentially how <code>%&gt;%</code> has been implemented
+prior to magrittr 2.0:</p>
 <div class="sourceCode" id="cb2"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="fu">local</span>({</span>
 <span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a>  . <span class="ot">&lt;-</span> x</span>
 <span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a>  . <span class="ot">&lt;-</span> <span class="fu">foo</span>(.)</span>
 <span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a>  <span class="fu">bar</span>(.)</span>
 <span id="cb2-5"><a href="#cb2-5" aria-hidden="true" tabindex="-1"></a>})</span></code></pre></div></li>
-<li><p><strong>Eager (mask-num)</strong>: masking environment, numbered placeholder</p>
+<li><p><strong>Eager (mask-num)</strong>: masking environment, numbered
+placeholder</p>
 <div class="sourceCode" id="cb3"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="fu">local</span>({</span>
 <span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a>  ...<span class="dv">1</span> <span class="ot">&lt;-</span> x</span>
 <span id="cb3-3"><a href="#cb3-3" aria-hidden="true" tabindex="-1"></a>  ...<span class="dv">2</span> <span class="ot">&lt;-</span> <span class="fu">foo</span>(...<span class="dv">1</span>)</span>
 <span id="cb3-4"><a href="#cb3-4" aria-hidden="true" tabindex="-1"></a>  <span class="fu">bar</span>(...<span class="dv">2</span>)</span>
 <span id="cb3-5"><a href="#cb3-5" aria-hidden="true" tabindex="-1"></a>})</span></code></pre></div></li>
 <li><p><strong>Eager (lexical)</strong>: lexical environment</p>
-<p>This variant assigns pipe expressions to the placeholder <code>.</code> in the current environment. This assignment is temporary: once the pipe has returned, the placeholder binding is reset to its previous state.</p>
+<p>This variant assigns pipe expressions to the placeholder
+<code>.</code> in the current environment. This assignment is temporary:
+once the pipe has returned, the placeholder binding is reset to its
+previous state.</p>
 <div class="sourceCode" id="cb4"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a>with_dot_cleanup <span class="ot">&lt;-</span> <span class="cf">function</span>(expr) {</span>
 <span id="cb4-2"><a href="#cb4-2" aria-hidden="true" tabindex="-1"></a>  <span class="co"># Initialises `.` in the caller environment and resets it on exit.</span></span>
 <span id="cb4-3"><a href="#cb4-3" aria-hidden="true" tabindex="-1"></a>  <span class="co"># (We use `:=` instead of `=` to avoid partial matching.)</span></span>
@@ -186,39 +398,75 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni
 <span id="cb5-4"><a href="#cb5-4" aria-hidden="true" tabindex="-1"></a><span class="fu">delayedAssign</span>(<span class="st">&quot;.&quot;</span>, x, mask1)</span>
 <span id="cb5-5"><a href="#cb5-5" aria-hidden="true" tabindex="-1"></a><span class="fu">delayedAssign</span>(<span class="st">&quot;.&quot;</span>, <span class="fu">foo</span>(.), mask2)</span>
 <span id="cb5-6"><a href="#cb5-6" aria-hidden="true" tabindex="-1"></a><span class="fu">with</span>(mask2, <span class="fu">bar</span>(.))</span></code></pre></div></li>
-<li><p><strong>Lazy (mask-num)</strong>: masking environment, numbered placeholder</p>
+<li><p><strong>Lazy (mask-num)</strong>: masking environment, numbered
+placeholder</p>
 <div class="sourceCode" id="cb6"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a><span class="fu">local</span>({</span>
 <span id="cb6-2"><a href="#cb6-2" aria-hidden="true" tabindex="-1"></a>  <span class="fu">delayedAssign</span>(<span class="st">&quot;...1&quot;</span>, x)</span>
 <span id="cb6-3"><a href="#cb6-3" aria-hidden="true" tabindex="-1"></a>  <span class="fu">delayedAssign</span>(<span class="st">&quot;...2&quot;</span>, <span class="fu">foo</span>(...<span class="dv">1</span>))</span>
 <span id="cb6-4"><a href="#cb6-4" aria-hidden="true" tabindex="-1"></a>  <span class="fu">bar</span>(...<span class="dv">2</span>)</span>
 <span id="cb6-5"><a href="#cb6-5" aria-hidden="true" tabindex="-1"></a>})</span></code></pre></div></li>
-<li><p><strong>Lazy (lexical-num)</strong>: lexical environment, numbered placeholder</p>
+<li><p><strong>Lazy (lexical-num)</strong>: lexical environment,
+numbered placeholder</p>
 <div class="sourceCode" id="cb7"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a><span class="fu">delayedAssign</span>(<span class="st">&quot;...1&quot;</span>, x)</span>
 <span id="cb7-2"><a href="#cb7-2" aria-hidden="true" tabindex="-1"></a><span class="fu">delayedAssign</span>(<span class="st">&quot;...2&quot;</span>, <span class="fu">foo</span>(.))</span>
 <span id="cb7-3"><a href="#cb7-3" aria-hidden="true" tabindex="-1"></a><span class="fu">bar</span>(...<span class="dv">2</span>)</span></code></pre></div></li>
 </ul>
-<p>We’ll first explore the desired properties we might want a pipe to possess and then see how each of the three variants does.</p>
+<p>We’ll first explore the desired properties we might want a pipe to
+possess and then see how each of the three variants does.</p>
 </div>
 <div id="desired-properties" class="section level2">
 <h2>Desired properties</h2>
-<p>These are the properties that we might want a pipe to possess, roughly ordered from most important to least important.</p>
+<p>These are the properties that we might want a pipe to possess,
+roughly ordered from most important to least important.</p>
 <ul>
-<li><p><strong>Visibility</strong>: the visibility of the final function in the pipe should be preserved. This is important so that pipes that end in a side-effect function (which generally returns its first argument invisibly) do not print.</p></li>
-<li><p><strong>Multiple placeholders</strong>: each component of the pipe should only be evaluated once even when there are multiple placeholders, so that <code>sample(10) %&gt;% cbind(., .)</code> yields two columns with the same value. Relatedly, <code>sample(10) %T&gt;% print() %T&gt;% print()</code> must print the same values twice.</p></li>
-<li><p><strong>Lazy evaluation</strong>: steps of the pipe should only be evaluated when actually needed. This is a useful property as it means that pipes can handle code like <code>stop(&quot;!&quot;) %&gt;% try()</code>, making pipes capable of capturing a wider range of R expressions.</p>
-<p>On the other hand, it might have surprising effects. For instance if a function that suppresses warnings is added to the end of a pipeline, the suppression takes effect for the whole pipeline.</p></li>
-<li><p><strong>Persistence of piped values</strong>: arguments are not necessarily evaluated right away by the piped function. Sometimes they are evaluated long after the pipeline has returned, for example when a function factory is piped. With persistent piped values, the constructed function can be called at any time:</p>
+<li><p><strong>Visibility</strong>: the visibility of the final function
+in the pipe should be preserved. This is important so that pipes that
+end in a side-effect function (which generally returns its first
+argument invisibly) do not print.</p></li>
+<li><p><strong>Multiple placeholders</strong>: each component of the
+pipe should only be evaluated once even when there are multiple
+placeholders, so that <code>sample(10) %&gt;% cbind(., .)</code> yields
+two columns with the same value. Relatedly,
+<code>sample(10) %T&gt;% print() %T&gt;% print()</code> must print the
+same values twice.</p></li>
+<li><p><strong>Lazy evaluation</strong>: steps of the pipe should only
+be evaluated when actually needed. This is a useful property as it means
+that pipes can handle code like <code>stop(&quot;!&quot;) %&gt;% try()</code>,
+making pipes capable of capturing a wider range of R expressions.</p>
+<p>On the other hand, it might have surprising effects. For instance if
+a function that suppresses warnings is added to the end of a pipeline,
+the suppression takes effect for the whole pipeline.</p></li>
+<li><p><strong>Persistence of piped values</strong>: arguments are not
+necessarily evaluated right away by the piped function. Sometimes they
+are evaluated long after the pipeline has returned, for example when a
+function factory is piped. With persistent piped values, the constructed
+function can be called at any time:</p>
 <div class="sourceCode" id="cb8"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a>factory <span class="ot">&lt;-</span> <span class="cf">function</span>(x) <span class="cf">function</span>() x</span>
 <span id="cb8-2"><a href="#cb8-2" aria-hidden="true" tabindex="-1"></a>fn <span class="ot">&lt;-</span> <span class="cn">NA</span> <span class="sc">%&gt;%</span> <span class="fu">factory</span>()</span>
 <span id="cb8-3"><a href="#cb8-3" aria-hidden="true" tabindex="-1"></a><span class="fu">fn</span>()</span>
 <span id="cb8-4"><a href="#cb8-4" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; [1] NA</span></span></code></pre></div></li>
-<li><p><strong>Refcount neutrality</strong>: the return value of the pipeline should have a reference count of 1 so it can be mutated in place in further manipulations.</p></li>
-<li><p><strong>Eager unbinding</strong>: pipes are often used with large data objects, so intermediate objects in the pipeline should be unbound as soon as possible so they are available for garbage collection.</p></li>
-<li><p><strong>Progressive stack</strong>: using the pipe should add as few entries to the call stack as possible, so that <code>traceback()</code> is maximally useful.</p></li>
-<li><p><strong>Lexical side effects</strong>: side effects should occur in the current lexical environment. This way, <code>NA %&gt;% { foo &lt;- . }</code> assigns the piped value in the current environment and <code>NA %&gt;% { return(.) }</code> returns from the function that contains the pipeline.</p></li>
-<li><p><strong>Continuous stack</strong>: the pipe should not affect the chain of parent frames. This is important for tree representations of the call stack.</p></li>
+<li><p><strong>Refcount neutrality</strong>: the return value of the
+pipeline should have a reference count of 1 so it can be mutated in
+place in further manipulations.</p></li>
+<li><p><strong>Eager unbinding</strong>: pipes are often used with large
+data objects, so intermediate objects in the pipeline should be unbound
+as soon as possible so they are available for garbage
+collection.</p></li>
+<li><p><strong>Progressive stack</strong>: using the pipe should add as
+few entries to the call stack as possible, so that
+<code>traceback()</code> is maximally useful.</p></li>
+<li><p><strong>Lexical side effects</strong>: side effects should occur
+in the current lexical environment. This way,
+<code>NA %&gt;% { foo &lt;- . }</code> assigns the piped value in the
+current environment and <code>NA %&gt;% { return(.) }</code> returns
+from the function that contains the pipeline.</p></li>
+<li><p><strong>Continuous stack</strong>: the pipe should not affect the
+chain of parent frames. This is important for tree representations of
+the call stack.</p></li>
 </ul>
-<p>It is possible to have proper visibility and a neutral impact on refcounts with all implementations by being a bit careful, so we’ll only consider the other properties:</p>
+<p>It is possible to have proper visibility and a neutral impact on
+refcounts with all implementations by being a bit careful, so we’ll only
+consider the other properties:</p>
 <table style="width:100%;">
 <colgroup>
 <col width="15%" />
@@ -317,37 +565,61 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni
 </table>
 <div id="implications-of-design-decisions" class="section level3">
 <h3>Implications of design decisions</h3>
-<p>Some properties are a direct reflection of the high level design decisions.</p>
+<p>Some properties are a direct reflection of the high level design
+decisions.</p>
 <div id="placeholder-binding" class="section level4">
 <h4>Placeholder binding</h4>
-<p>The nested pipe does not assign piped expressions to a placeholder. All the other variants perform this assignment. This means that with a nested rewrite approach, it isn’t possible to have multiple placeholders unless the piped expression is pasted multiple times. This would cause multiple evaluations with deleterious effects:</p>
+<p>The nested pipe does not assign piped expressions to a placeholder.
+All the other variants perform this assignment. This means that with a
+nested rewrite approach, it isn’t possible to have multiple placeholders
+unless the piped expression is pasted multiple times. This would cause
+multiple evaluations with deleterious effects:</p>
 <div class="sourceCode" id="cb9"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a><span class="fu">sample</span>(<span class="dv">10</span>) <span class="sc">%&gt;%</span> <span class="fu">list</span>(., .)</span>
 <span id="cb9-2"><a href="#cb9-2" aria-hidden="true" tabindex="-1"></a></span>
 <span id="cb9-3"><a href="#cb9-3" aria-hidden="true" tabindex="-1"></a><span class="co"># Becomes</span></span>
 <span id="cb9-4"><a href="#cb9-4" aria-hidden="true" tabindex="-1"></a><span class="fu">list</span>(<span class="fu">sample</span>(<span class="dv">10</span>), <span class="fu">sample</span>(<span class="dv">10</span>))</span></code></pre></div>
-<p>Assigning to the placeholder within an argument would preserve the nestedness and lazyness. However that wouldn’t work properly because there’s no guarantee that the first argument will be evaluated before the second argument.</p>
+<p>Assigning to the placeholder within an argument would preserve the
+nestedness and lazyness. However that wouldn’t work properly because
+there’s no guarantee that the first argument will be evaluated before
+the second argument.</p>
 <div class="sourceCode" id="cb10"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true" tabindex="-1"></a><span class="fu">sample</span>(<span class="dv">10</span>) <span class="sc">%&gt;%</span> <span class="fu">foo</span>(., .)</span>
 <span id="cb10-2"><a href="#cb10-2" aria-hidden="true" tabindex="-1"></a><span class="fu">foo</span>(. <span class="ot">&lt;-</span> <span class="fu">sample</span>(<span class="dv">10</span>), .)</span></code></pre></div>
-<p>For these reasons, the nested pipe does not support multiple placeholders. By contrast, all the other variants assign the result of pipe expressions to the placeholder. There are variations in how the placeholder binding is created (lazily or eagerly, in a mask or in the current environment, with numbered symbols or with a unique symbol) but all these variants allow multiple placeholders.</p>
+<p>For these reasons, the nested pipe does not support multiple
+placeholders. By contrast, all the other variants assign the result of
+pipe expressions to the placeholder. There are variations in how the
+placeholder binding is created (lazily or eagerly, in a mask or in the
+current environment, with numbered symbols or with a unique symbol) but
+all these variants allow multiple placeholders.</p>
 </div>
 <div id="masking-environment" class="section level4">
 <h4>Masking environment</h4>
-<p>Because the local variants of the pipe evaluate in a mask, they do not have lexical effects or a continuous stack. This is unlike the lexical variants that evaluate in the current environment.</p>
+<p>Because the local variants of the pipe evaluate in a mask, they do
+not have lexical effects or a continuous stack. This is unlike the
+lexical variants that evaluate in the current environment.</p>
 </div>
 <div id="laziness" class="section level4">
 <h4>Laziness</h4>
-<p>Unlike the lazy variants, all eager versions implementing the pipe with iterated evaluation do not pass the lazy evaluation criterion.</p>
-<p>Secondly, no lazy variant passes the progressive stack criterion. By construction, lazy evaluation requires pushing all the pipe expressions on the stack before evaluation starts. Conversely, all eager variants have a progressive stack.</p>
+<p>Unlike the lazy variants, all eager versions implementing the pipe
+with iterated evaluation do not pass the lazy evaluation criterion.</p>
+<p>Secondly, no lazy variant passes the progressive stack criterion. By
+construction, lazy evaluation requires pushing all the pipe expressions
+on the stack before evaluation starts. Conversely, all eager variants
+have a progressive stack.</p>
 </div>
 <div id="numbered-placeholders" class="section level4">
 <h4>Numbered placeholders</h4>
-<p>None of the variants that use numbered placeholders can unbind piped values eagerly. This is how they achieve persistence of these bindings.</p>
+<p>None of the variants that use numbered placeholders can unbind piped
+values eagerly. This is how they achieve persistence of these
+bindings.</p>
 </div>
 </div>
 </div>
 <div id="three-implementations" class="section level2">
 <h2>Three implementations</h2>
-<p>The GNU R team is considering implementing the nested approach in base R with a parse-time code transformation (just like <code>-&gt;</code> is transformed to <code>&lt;-</code> by the parser).</p>
+<p>The GNU R team is considering implementing the nested approach in
+base R with a parse-time code transformation (just like
+<code>-&gt;</code> is transformed to <code>&lt;-</code> by the
+parser).</p>
 <p>We have implemented three approaches in magrittr:</p>
 <ul>
 <li>The nested pipe</li>
@@ -360,13 +632,15 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni
 <div class="sourceCode" id="cb11"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb11-1"><a href="#cb11-1" aria-hidden="true" tabindex="-1"></a><span class="st">`</span><span class="at">%|&gt;%</span><span class="st">`</span> <span class="ot">&lt;-</span> magrittr<span class="sc">::</span>pipe_nested</span></code></pre></div>
 <div id="multiple-placeholders" class="section level4">
 <h4>Multiple placeholders ❌</h4>
-<p>The nested pipe does not bind expressions to a placeholder and so can’t support multiple placeholders.</p>
+<p>The nested pipe does not bind expressions to a placeholder and so
+can’t support multiple placeholders.</p>
 <div class="sourceCode" id="cb12"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb12-1"><a href="#cb12-1" aria-hidden="true" tabindex="-1"></a><span class="st">&quot;foo&quot;</span> <span class="sc">%|&gt;%</span> <span class="fu">list</span>(., .)</span>
 <span id="cb12-2"><a href="#cb12-2" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; Error: Can&#39;t use multiple placeholders.</span></span></code></pre></div>
 </div>
 <div id="lazy-evaluation" class="section level4">
 <h4>Lazy evaluation ✅</h4>
-<p>Because it relies on the usual rules of argument application, the nested pipe is lazy.</p>
+<p>Because it relies on the usual rules of argument application, the
+nested pipe is lazy.</p>
 <div class="sourceCode" id="cb13"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb13-1"><a href="#cb13-1" aria-hidden="true" tabindex="-1"></a>{</span>
 <span id="cb13-2"><a href="#cb13-2" aria-hidden="true" tabindex="-1"></a>  <span class="fu">stop</span>(<span class="st">&quot;oh no&quot;</span>) <span class="sc">%|&gt;%</span> <span class="fu">try</span>(<span class="at">silent =</span> <span class="cn">TRUE</span>)</span>
 <span id="cb13-3"><a href="#cb13-3" aria-hidden="true" tabindex="-1"></a>  <span class="st">&quot;success&quot;</span></span>
@@ -375,8 +649,13 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni
 </div>
 <div id="persistence-and-eager-unbinding" class="section level4">
 <h4>Persistence and eager unbinding ✅</h4>
-<p>The pipe expressions are binded as promises within the execution environment of each function. This environment persists as long as a promise holds onto it. Evaluating the promise discards the reference to the environment which becomes available for garbage collection.</p>
-<p>For instance, here is a function factory that creates a function. The constructed function returns the value supplied at the time of creation:</p>
+<p>The pipe expressions are binded as promises within the execution
+environment of each function. This environment persists as long as a
+promise holds onto it. Evaluating the promise discards the reference to
+the environment which becomes available for garbage collection.</p>
+<p>For instance, here is a function factory that creates a function. The
+constructed function returns the value supplied at the time of
+creation:</p>
 <div class="sourceCode" id="cb14"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb14-1"><a href="#cb14-1" aria-hidden="true" tabindex="-1"></a>factory <span class="ot">&lt;-</span> <span class="cf">function</span>(x) <span class="cf">function</span>() x</span>
 <span id="cb14-2"><a href="#cb14-2" aria-hidden="true" tabindex="-1"></a>fn <span class="ot">&lt;-</span> <span class="fu">factory</span>(<span class="cn">TRUE</span>)</span>
 <span id="cb14-3"><a href="#cb14-3" aria-hidden="true" tabindex="-1"></a><span class="fu">fn</span>()</span>
@@ -387,7 +666,9 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni
 </div>
 <div id="progressive-stack" class="section level4">
 <h4>Progressive stack ❌</h4>
-<p>Because the piped expressions are lazily evaluated, the whole pipeline is pushed on the stack before execution starts. This results in a more complex backtrace than necessary:</p>
+<p>Because the piped expressions are lazily evaluated, the whole
+pipeline is pushed on the stack before execution starts. This results in
+a more complex backtrace than necessary:</p>
 <div class="sourceCode" id="cb16"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb16-1"><a href="#cb16-1" aria-hidden="true" tabindex="-1"></a>faulty <span class="ot">&lt;-</span> <span class="cf">function</span>() <span class="fu">stop</span>(<span class="st">&quot;tilt&quot;</span>)</span>
 <span id="cb16-2"><a href="#cb16-2" aria-hidden="true" tabindex="-1"></a>f <span class="ot">&lt;-</span> <span class="cf">function</span>(x) x <span class="sc">+</span> <span class="dv">1</span></span>
 <span id="cb16-3"><a href="#cb16-3" aria-hidden="true" tabindex="-1"></a>g <span class="ot">&lt;-</span> <span class="cf">function</span>(x) x <span class="sc">+</span> <span class="dv">2</span></span>
@@ -404,11 +685,14 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni
 <span id="cb16-14"><a href="#cb16-14" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; 3: h(g(f(faulty())))</span></span>
 <span id="cb16-15"><a href="#cb16-15" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; 2: .External2(magrittr_pipe) at pipe.R#181</span></span>
 <span id="cb16-16"><a href="#cb16-16" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; 1: faulty() %|&gt;% f() %|&gt;% g() %|&gt;% h()</span></span></code></pre></div>
-<p>Also note how the expressions in the backtrace look different from the actual code. This is because of the nested rewrite of the pipeline.</p>
+<p>Also note how the expressions in the backtrace look different from
+the actual code. This is because of the nested rewrite of the
+pipeline.</p>
 </div>
 <div id="lexical-effects" class="section level4">
 <h4>Lexical effects ✅</h4>
-<p>This is a benefit of using the normal R rules of evaluation. Side effects occur in the correct environment:</p>
+<p>This is a benefit of using the normal R rules of evaluation. Side
+effects occur in the correct environment:</p>
 <div class="sourceCode" id="cb17"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb17-1"><a href="#cb17-1" aria-hidden="true" tabindex="-1"></a>foo <span class="ot">&lt;-</span> <span class="cn">FALSE</span></span>
 <span id="cb17-2"><a href="#cb17-2" aria-hidden="true" tabindex="-1"></a><span class="cn">TRUE</span> <span class="sc">%|&gt;%</span> <span class="fu">assign</span>(<span class="st">&quot;foo&quot;</span>, .)</span>
 <span id="cb17-3"><a href="#cb17-3" aria-hidden="true" tabindex="-1"></a>foo</span>
@@ -423,9 +707,12 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni
 </div>
 <div id="continuous-stack" class="section level4">
 <h4>Continuous stack ✅</h4>
-<p>Because evaluation occurs in the current environment, the stack is continuous. Let’s instrument errors with a structured backtrace to see what that means:</p>
+<p>Because evaluation occurs in the current environment, the stack is
+continuous. Let’s instrument errors with a structured backtrace to see
+what that means:</p>
 <div class="sourceCode" id="cb19"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb19-1"><a href="#cb19-1" aria-hidden="true" tabindex="-1"></a><span class="fu">options</span>(<span class="at">error =</span> rlang<span class="sc">::</span>entrace)</span></code></pre></div>
-<p>The tree representation of the backtrace correctly represents the hierarchy of execution frames:</p>
+<p>The tree representation of the backtrace correctly represents the
+hierarchy of execution frames:</p>
 <div class="sourceCode" id="cb20"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb20-1"><a href="#cb20-1" aria-hidden="true" tabindex="-1"></a>foobar <span class="ot">&lt;-</span> <span class="cf">function</span>(x) x <span class="sc">%|&gt;%</span> <span class="fu">quux</span>()</span>
 <span id="cb20-2"><a href="#cb20-2" aria-hidden="true" tabindex="-1"></a>quux <span class="ot">&lt;-</span> <span class="cf">function</span>(x) x <span class="sc">%|&gt;%</span> <span class="fu">stop</span>()</span>
 <span id="cb20-3"><a href="#cb20-3" aria-hidden="true" tabindex="-1"></a></span>
@@ -449,7 +736,9 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni
 <div class="sourceCode" id="cb21"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb21-1"><a href="#cb21-1" aria-hidden="true" tabindex="-1"></a><span class="st">`</span><span class="at">%!&gt;%</span><span class="st">`</span> <span class="ot">&lt;-</span> magrittr<span class="sc">::</span>pipe_eager_lexical</span></code></pre></div>
 <div id="multiple-placeholders-1" class="section level4">
 <h4>Multiple placeholders ✅</h4>
-<p>Pipe expressions are eagerly assigned to the placeholder. This makes it possible to use the placeholder multiple times without causing multiple evaluations.</p>
+<p>Pipe expressions are eagerly assigned to the placeholder. This makes
+it possible to use the placeholder multiple times without causing
+multiple evaluations.</p>
 <div class="sourceCode" id="cb22"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb22-1"><a href="#cb22-1" aria-hidden="true" tabindex="-1"></a><span class="st">&quot;foo&quot;</span> <span class="sc">%!&gt;%</span> <span class="fu">list</span>(., .)</span>
 <span id="cb22-2"><a href="#cb22-2" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; [[1]]</span></span>
 <span id="cb22-3"><a href="#cb22-3" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; [1] &quot;foo&quot;</span></span>
@@ -468,14 +757,22 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni
 </div>
 <div id="persistence" class="section level4">
 <h4>Persistence: ❌</h4>
-<p>Because we’re updating the value of <code>.</code> at each step, the piped expressions are not persistent. This has subtle effects when the piped expressions are not evaluated right away.</p>
-<p>With the eager pipe we get rather confusing results with the factory function if we try to call the constructed function in the middle of the pipeline. In the following snippet the placeholder <code>.</code> is binded to the constructed function itself rather than the initial value <code>TRUE</code>, by the time the function is called:</p>
+<p>Because we’re updating the value of <code>.</code> at each step, the
+piped expressions are not persistent. This has subtle effects when the
+piped expressions are not evaluated right away.</p>
+<p>With the eager pipe we get rather confusing results with the factory
+function if we try to call the constructed function in the middle of the
+pipeline. In the following snippet the placeholder <code>.</code> is
+binded to the constructed function itself rather than the initial value
+<code>TRUE</code>, by the time the function is called:</p>
 <div class="sourceCode" id="cb24"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb24-1"><a href="#cb24-1" aria-hidden="true" tabindex="-1"></a>fn <span class="ot">&lt;-</span> <span class="cn">TRUE</span> <span class="sc">%!&gt;%</span> <span class="fu">factory</span>() <span class="sc">%!&gt;%</span> { .() }</span>
 <span id="cb24-2"><a href="#cb24-2" aria-hidden="true" tabindex="-1"></a><span class="fu">fn</span>()</span>
 <span id="cb24-3"><a href="#cb24-3" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; function() x</span></span>
-<span id="cb24-4"><a href="#cb24-4" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; &lt;bytecode: 0x11d1b6758&gt;</span></span>
-<span id="cb24-5"><a href="#cb24-5" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; &lt;environment: 0x11da6d628&gt;</span></span></code></pre></div>
-<p>Also, since we’re binding <code>.</code> in the current environment, we need to clean it up once the pipeline has returned. At that point, the placeholder no longer exists:</p>
+<span id="cb24-4"><a href="#cb24-4" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; &lt;bytecode: 0x55b5d20b3de0&gt;</span></span>
+<span id="cb24-5"><a href="#cb24-5" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; &lt;environment: 0x55b5d20281a8&gt;</span></span></code></pre></div>
+<p>Also, since we’re binding <code>.</code> in the current environment,
+we need to clean it up once the pipeline has returned. At that point,
+the placeholder no longer exists:</p>
 <div class="sourceCode" id="cb25"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb25-1"><a href="#cb25-1" aria-hidden="true" tabindex="-1"></a>fn <span class="ot">&lt;-</span> <span class="cn">TRUE</span> <span class="sc">%!&gt;%</span> <span class="fu">factory</span>()</span>
 <span id="cb25-2"><a href="#cb25-2" aria-hidden="true" tabindex="-1"></a><span class="fu">fn</span>()</span>
 <span id="cb25-3"><a href="#cb25-3" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; Error in fn(): object &#39;.&#39; not found</span></span></code></pre></div>
@@ -487,11 +784,15 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni
 </div>
 <div id="eager-unbinding" class="section level4">
 <h4>Eager unbinding: ✅</h4>
-<p>This is the flip side of updating the value of the placeholder at each step. The previous intermediary values can be collected right away.</p>
+<p>This is the flip side of updating the value of the placeholder at
+each step. The previous intermediary values can be collected right
+away.</p>
 </div>
 <div id="progressive-stack-1" class="section level4">
 <h4>Progressive stack: ✅</h4>
-<p>Since pipe expressions are evaluated one by one as they come, only the relevant part of the pipeline is on the stack when an error is thrown:</p>
+<p>Since pipe expressions are evaluated one by one as they come, only
+the relevant part of the pipeline is on the stack when an error is
+thrown:</p>
 <div class="sourceCode" id="cb27"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb27-1"><a href="#cb27-1" aria-hidden="true" tabindex="-1"></a>faulty <span class="ot">&lt;-</span> <span class="cf">function</span>() <span class="fu">stop</span>(<span class="st">&quot;tilt&quot;</span>)</span>
 <span id="cb27-2"><a href="#cb27-2" aria-hidden="true" tabindex="-1"></a>f <span class="ot">&lt;-</span> <span class="cf">function</span>(x) x <span class="sc">+</span> <span class="dv">1</span></span>
 <span id="cb27-3"><a href="#cb27-3" aria-hidden="true" tabindex="-1"></a>g <span class="ot">&lt;-</span> <span class="cf">function</span>(x) x <span class="sc">+</span> <span class="dv">2</span></span>
@@ -508,7 +809,8 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni
 </div>
 <div id="lexical-effects-and-continuous-stack" class="section level4">
 <h4>Lexical effects and continuous stack: ✅</h4>
-<p>Evaluating in the current environment rather than in a mask produces the correct side effects:</p>
+<p>Evaluating in the current environment rather than in a mask produces
+the correct side effects:</p>
 <div class="sourceCode" id="cb28"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb28-1"><a href="#cb28-1" aria-hidden="true" tabindex="-1"></a>foo <span class="ot">&lt;-</span> <span class="cn">FALSE</span></span>
 <span id="cb28-2"><a href="#cb28-2" aria-hidden="true" tabindex="-1"></a><span class="cn">NA</span> <span class="sc">%!&gt;%</span> { foo <span class="ot">&lt;-</span> <span class="cn">TRUE</span>; . }</span>
 <span id="cb28-3"><a href="#cb28-3" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; [1] NA</span></span>
@@ -529,7 +831,9 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni
 <div class="sourceCode" id="cb30"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb30-1"><a href="#cb30-1" aria-hidden="true" tabindex="-1"></a><span class="st">`</span><span class="at">%?&gt;%</span><span class="st">`</span> <span class="ot">&lt;-</span> magrittr<span class="sc">::</span>pipe_lazy_masking</span></code></pre></div>
 <div id="multiple-placeholders-2" class="section level4">
 <h4>Multiple placeholders ✅</h4>
-<p>Pipe expressions are lazily assigned to the placeholder. This makes it possible to use the placeholder multiple times without causing multiple evaluations.</p>
+<p>Pipe expressions are lazily assigned to the placeholder. This makes
+it possible to use the placeholder multiple times without causing
+multiple evaluations.</p>
 <div class="sourceCode" id="cb31"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb31-1"><a href="#cb31-1" aria-hidden="true" tabindex="-1"></a><span class="st">&quot;foo&quot;</span> <span class="sc">%?&gt;%</span> <span class="fu">list</span>(., .)</span>
 <span id="cb31-2"><a href="#cb31-2" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; [[1]]</span></span>
 <span id="cb31-3"><a href="#cb31-3" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; [1] &quot;foo&quot;</span></span>
@@ -539,7 +843,8 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni
 </div>
 <div id="lazy-evaluation-2" class="section level4">
 <h4>Lazy evaluation ✅</h4>
-<p>Arguments are assigned with <code>delayedAssign()</code> and lazily evaluated:</p>
+<p>Arguments are assigned with <code>delayedAssign()</code> and lazily
+evaluated:</p>
 <div class="sourceCode" id="cb32"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb32-1"><a href="#cb32-1" aria-hidden="true" tabindex="-1"></a>{</span>
 <span id="cb32-2"><a href="#cb32-2" aria-hidden="true" tabindex="-1"></a>  <span class="fu">stop</span>(<span class="st">&quot;oh no&quot;</span>) <span class="sc">%?&gt;%</span> <span class="fu">try</span>(<span class="at">silent =</span> <span class="cn">TRUE</span>)</span>
 <span id="cb32-3"><a href="#cb32-3" aria-hidden="true" tabindex="-1"></a>  <span class="st">&quot;success&quot;</span></span>
@@ -548,18 +853,24 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni
 </div>
 <div id="persistence-1" class="section level4">
 <h4>Persistence: ✅</h4>
-<p>The lazy masking pipe uses one masking environment per pipe expression. This allows persistence of the intermediary values and out of order evaluation. The factory function works as expected for instance:</p>
+<p>The lazy masking pipe uses one masking environment per pipe
+expression. This allows persistence of the intermediary values and out
+of order evaluation. The factory function works as expected for
+instance:</p>
 <div class="sourceCode" id="cb33"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb33-1"><a href="#cb33-1" aria-hidden="true" tabindex="-1"></a>fn <span class="ot">&lt;-</span> <span class="cn">TRUE</span> <span class="sc">%?&gt;%</span> <span class="fu">factory</span>()</span>
 <span id="cb33-2"><a href="#cb33-2" aria-hidden="true" tabindex="-1"></a><span class="fu">fn</span>()</span>
 <span id="cb33-3"><a href="#cb33-3" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; [1] TRUE</span></span></code></pre></div>
 </div>
 <div id="eager-unbinding-1" class="section level4">
 <h4>Eager unbinding: ✅</h4>
-<p>Because we use one mask environment per pipe expression, the intermediary values can be collected as soon as they are no longer needed.</p>
+<p>Because we use one mask environment per pipe expression, the
+intermediary values can be collected as soon as they are no longer
+needed.</p>
 </div>
 <div id="progressive-stack-2" class="section level4">
 <h4>Progressive stack: ❌</h4>
-<p>With a lazy pipe the whole pipeline is pushed onto the stack before evaluation.</p>
+<p>With a lazy pipe the whole pipeline is pushed onto the stack before
+evaluation.</p>
 <div class="sourceCode" id="cb34"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb34-1"><a href="#cb34-1" aria-hidden="true" tabindex="-1"></a>faulty <span class="ot">&lt;-</span> <span class="cf">function</span>() <span class="fu">stop</span>(<span class="st">&quot;tilt&quot;</span>)</span>
 <span id="cb34-2"><a href="#cb34-2" aria-hidden="true" tabindex="-1"></a>f <span class="ot">&lt;-</span> <span class="cf">function</span>(x) x <span class="sc">+</span> <span class="dv">1</span></span>
 <span id="cb34-3"><a href="#cb34-3" aria-hidden="true" tabindex="-1"></a>g <span class="ot">&lt;-</span> <span class="cf">function</span>(x) x <span class="sc">+</span> <span class="dv">2</span></span>
@@ -576,16 +887,19 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni
 <span id="cb34-14"><a href="#cb34-14" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; 3: h(.)</span></span>
 <span id="cb34-15"><a href="#cb34-15" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; 2: .External2(magrittr_pipe) at pipe.R#174</span></span>
 <span id="cb34-16"><a href="#cb34-16" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; 1: faulty() %?&gt;% f() %?&gt;% g() %?&gt;% h()</span></span></code></pre></div>
-<p>Note however how the backtrace is less cluttered than with the nested pipe approach, thanks to the placeholder.</p>
+<p>Note however how the backtrace is less cluttered than with the nested
+pipe approach, thanks to the placeholder.</p>
 </div>
 <div id="lexical-effects-1" class="section level4">
 <h4>Lexical effects ❌</h4>
-<p>The lazy pipe evaluates in a mask. This causes lexical side effects to occur in the incorrect environment.</p>
+<p>The lazy pipe evaluates in a mask. This causes lexical side effects
+to occur in the incorrect environment.</p>
 <div class="sourceCode" id="cb35"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb35-1"><a href="#cb35-1" aria-hidden="true" tabindex="-1"></a>foo <span class="ot">&lt;-</span> <span class="cn">FALSE</span></span>
 <span id="cb35-2"><a href="#cb35-2" aria-hidden="true" tabindex="-1"></a><span class="cn">TRUE</span> <span class="sc">%?&gt;%</span> <span class="fu">assign</span>(<span class="st">&quot;foo&quot;</span>, .)</span>
 <span id="cb35-3"><a href="#cb35-3" aria-hidden="true" tabindex="-1"></a>foo</span>
 <span id="cb35-4"><a href="#cb35-4" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; [1] FALSE</span></span></code></pre></div>
-<p>Stack-sensitive functions like <code>return()</code> function cannot find the proper frame environment:</p>
+<p>Stack-sensitive functions like <code>return()</code> function cannot
+find the proper frame environment:</p>
 <div class="sourceCode" id="cb36"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb36-1"><a href="#cb36-1" aria-hidden="true" tabindex="-1"></a>fn <span class="ot">&lt;-</span> <span class="cf">function</span>() {</span>
 <span id="cb36-2"><a href="#cb36-2" aria-hidden="true" tabindex="-1"></a>  <span class="cn">TRUE</span> <span class="sc">%?&gt;%</span> <span class="fu">return</span>()</span>
 <span id="cb36-3"><a href="#cb36-3" aria-hidden="true" tabindex="-1"></a>  <span class="cn">FALSE</span></span>

Debdiff

[The following lists of changes regard files as different if they have different names, permissions or owners.]

Files in second set of .debs but not in first

-rw-r--r--  root/root   /usr/lib/debug/.build-id/15/93d20556909c03bf0a5811548bc922f17e9a24.debug

Files in first set of .debs but not in second

-rw-r--r--  root/root   /usr/lib/debug/.build-id/5e/f926afe052ab3ebeeb7629e1c93a2f7dad0c66.debug

No differences were encountered between the control files of package r-cran-magrittr

Control files of package r-cran-magrittr-dbgsym: lines which differ (wdiff format)

  • Build-Ids: 5ef926afe052ab3ebeeb7629e1c93a2f7dad0c66 1593d20556909c03bf0a5811548bc922f17e9a24

More details

Full run details