<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Posts on Credibly Curious</title>
    <link>https://www.njtierney.com/post/</link>
    <description>Recent content in Posts on Credibly Curious</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Mon, 14 Apr 2025 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://www.njtierney.com/post/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>R Version 4.5.0 is Out!</title>
      <link>https://www.njtierney.com/post/2025/04/14/r-version-4-5-0-is-out/</link>
      <pubDate>Mon, 14 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://www.njtierney.com/post/2025/04/14/r-version-4-5-0-is-out/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;
&lt;p&gt;&lt;img src=&#34;figs/windows-olympus-xa-portra-800.jpg&#34; width=&#34;700px&#34; style=&#34;display: block; margin: auto;&#34; /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Some windows. Olympus XA, Portra 800. Photo by Nicholas Tierney&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The new R version 4.5.0 is out, and you should get it!&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve read through &lt;a href=&#34;https://cran.r-project.org/doc/manuals/r-release/NEWS.html&#34;&gt;the NEWS file&lt;/a&gt;, which details every change - there are many! I would recommend having a skim.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;d like to have a skim of the news file, you even use the &lt;a href=&#34;https://rdrr.io/r/utils/news.html&#34;&gt;&lt;code&gt;news()&lt;/code&gt;&lt;/a&gt; R function, which will open the NEWS file to your help file pane in RStudio. This can also tell us how many news bullets were added:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;news_4_5_0&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/utils/news.html&#39;&gt;news&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;Version&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;==&lt;/span&gt; &lt;span class=&#39;s&#39;&gt;&#34;4.5.0&#34;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;# just show the first 5&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/utils/head.html&#39;&gt;head&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;news_4_5_0&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;                         Changes in version 4.5.0                        &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; NEW FEATURES&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;     o   as.integer(rl) and hence as.raw(rl) now work for a list of&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   raw(1) elements, as proposed by Michael Chirico&#39;s PR#18696.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;     o   graphics&#39; grid() gains optional argument nintLog.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;     o   New functions check_package_urls() and check_package_dois() in&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   package tools for checking URLs and DOIs in package sources.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;     o   New head() and tail() methods for class &#34;ts&#34; time series,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   proposed by Spencer Graves on R-devel.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;     o   New qr.influence() function, a &#34;bare bones&#34; interface to the&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   lm.influence() leave-one-out diagnostics computations; wished&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   for in PR#18739.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;     o   Package citation() results auto-generated from the package&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   metadata now also provide package DOIs for CRAN and&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   Bioconductor packages.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The work of this release involved many people, and there are 150 changes. I think it&amp;rsquo;s worthwhile reading over these changes, and I am incredibly grateful to all the amazing volunteers who put their time and energy into continuing to make R stable, and awesome.&lt;/p&gt;
&lt;p&gt;I thought I&amp;rsquo;d share just a couple of the changes that jumped out at me as I was reading.&lt;/p&gt;
&lt;h1 id=&#34;installation-is-now-faster&#34;&gt;Installation is now faster&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://rdrr.io/r/utils/install.packages.html&#34;&gt;&lt;code&gt;install.packages()&lt;/code&gt;&lt;/a&gt; and &lt;a href=&#34;https://rdrr.io/r/utils/download.packages.html&#34;&gt;&lt;code&gt;download.packages()&lt;/code&gt;&lt;/a&gt; download packages simultaneously using &lt;code&gt;libcurl&lt;/code&gt;, significantly reducing download times when installing or downloading multiple packages.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is cool! Installing packages is now much faster! I love this. Generally, I use &lt;a href=&#34;https://github.com/r-lib/pak&#34;&gt;&lt;code&gt;pak&lt;/code&gt;&lt;/a&gt;, which I believe already does this. But it&amp;rsquo;s a nice win for vanilla R to know I can download things faster.&lt;/p&gt;
&lt;h1 id=&#34;data&#34;&gt;Data&lt;/h1&gt;
&lt;p&gt;There are two new datasets added to R! The last time (that I could find) a new dataset was added to R was in &lt;a href=&#34;https://cran.r-project.org/doc/manuals/r-devel/NEWS.3.html&#34;&gt;R version 3.0.2&lt;/a&gt;, which, &lt;a href=&#34;https://cran.r-project.org/bin/windows/base/old/&#34;&gt;going to the release dates&lt;/a&gt;, was in September 2013. So, nearly 12 years ago! That NEWS item read:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Dataset &lt;code&gt;npk&lt;/code&gt; has been copied from MASS to allow more tests to be run without recommended packages being installed.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You might be familiar with one of these new datasets, the penguins data (!) from the &lt;a href=&#34;https://github.com/allisonhorst/palmerpenguins/&#34;&gt;&lt;code&gt;palmerpenguins&lt;/code&gt;&lt;/a&gt; R package.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;p&gt;&lt;img src=&#34;figs/lter_penguins.png&#34; width=&#34;700px&#34; style=&#34;display: block; margin: auto;&#34; /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;artwork by &lt;a href=&#34;https://allisonhorst.com/&#34;&gt;Allison Horst&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The NEWS item reads:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;New datasets penguins and penguins_raw thanks to &lt;a href=&#34;https://ellakaye.co.uk/&#34;&gt;Ella Kaye&lt;/a&gt;, &lt;a href=&#34;https://www.heatherturner.net/&#34;&gt;Heather Turner&lt;/a&gt;, and &lt;a href=&#34;https://gormankb.github.io/&#34;&gt;Kristen Gorman&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is huge! Well, I think it is. Now we don&amp;rsquo;t need to write &lt;a href=&#34;https://allisonhorst.github.io/palmerpenguins/&#34;&gt;&lt;code&gt;library(palmerpenguins)&lt;/code&gt;&lt;/a&gt; if you want to use the &lt;code&gt;penguins&lt;/code&gt; or &lt;code&gt;penguins_raw&lt;/code&gt; data. Looking at the examples, we can see the following base visualisations:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;c&#39;&gt;## bill depth vs. length by species (color) and sex (symbol):&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;## positive correlations for all species, males tend to have bigger bills&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/utils/head.html&#39;&gt;head&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;penguins&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   species    island bill_len bill_dep flipper_len body_mass    sex year&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; 1  Adelie Torgersen     39.1     18.7         181      3750   male 2007&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; 2  Adelie Torgersen     39.5     17.4         186      3800 female 2007&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; 3  Adelie Torgersen     40.3     18.0         195      3250 female 2007&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; 4  Adelie Torgersen       NA       NA          NA        NA   &amp;lt;NA&amp;gt; 2007&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; 5  Adelie Torgersen     36.7     19.3         193      3450 female 2007&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; 6  Adelie Torgersen     39.3     20.6         190      3650   male 2007&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/names.html&#39;&gt;names&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;penguins&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; [1] &#34;species&#34;     &#34;island&#34;      &#34;bill_len&#34;    &#34;bill_dep&#34;    &#34;flipper_len&#34;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; [6] &#34;body_mass&#34;   &#34;sex&#34;         &#34;year&#34;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;sym&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/c.html&#39;&gt;c&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;m&#39;&gt;1&lt;/span&gt;, &lt;span class=&#39;m&#39;&gt;16&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;pal&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/c.html&#39;&gt;c&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;s&#39;&gt;&#34;darkorange&#34;&lt;/span&gt;,&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;s&#39;&gt;&#34;purple&#34;&lt;/span&gt;,&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;s&#39;&gt;&#34;cyan4&#34;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/graphics/plot.default.html&#39;&gt;plot&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nv&#39;&gt;bill_dep&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;~&lt;/span&gt; &lt;span class=&#39;nv&#39;&gt;bill_len&lt;/span&gt;, &lt;/span&gt;
&lt;span&gt;  data &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nv&#39;&gt;penguins&lt;/span&gt;, &lt;/span&gt;
&lt;span&gt;  pch &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nv&#39;&gt;sym&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;[&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;sex&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;]&lt;/span&gt;, &lt;/span&gt;
&lt;span&gt;  col &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nv&#39;&gt;pal&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;[&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;species&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&#34;figs/penguins-plot-1.png&#34; width=&#34;700px&#34; style=&#34;display: block; margin: auto;&#34; /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;It is worth noting that the variable names are slightly different in the new base R version - &lt;code&gt;bill_len&lt;/code&gt; (not &lt;code&gt;bill_length&lt;/code&gt;) &lt;code&gt;bill_dep&lt;/code&gt; (not &lt;code&gt;bill_depth&lt;/code&gt;), and &lt;code&gt;flipper_len&lt;/code&gt; (not &lt;code&gt;flipper_length&lt;/code&gt;), which they note in the helpfile: &amp;ldquo;The penguins data has some shorter variable names than the palmerpenguins version, for compact code and data display.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;There has been a bit of work done on the penguins data, and I wanted to share the relevant references:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Gorman, K. B., Williams, T. D. and Fraser, W. R. (2014) Ecological Sexual Dimorphism and Environmental Variability within a Community of Antarctic Penguins (Genus Pygoscelis). PLoS ONE 9, 3, e90081; &lt;a href=&#34;https://doi.org/10.1371/journal.pone.0090081&#34;&gt;doi:10.1371/journal.pone.0090081&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Horst, A. M., Hill, A. P. and Gorman, K. B. (2022) Palmer Archipelago Penguins Data in the palmerpenguins R Package - An Alternative to Anderson&amp;rsquo;s Irises. R Journal 14, 1; &lt;a href=&#34;https://doi.org/10.32614/RJ-2022-020&#34;&gt;doi:10.32614/RJ-2022-020&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Kaye, E., Turner, H., Gorman, K. B., Horst, A. M. and Hill, A. P. (2025) Preparing the Palmer Penguins Data for the datasets Package in R. &lt;a href=&#34;https://doi.org/10.5281/zenodo.14902740&#34;&gt;doi:10.5281/zenodo.14902740&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And there&amp;rsquo;s ANOTHER dataset!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;New dataset gait thanks to &lt;a href=&#34;&#34;&gt;Heather Turner&lt;/a&gt; and &lt;a href=&#34;&#34;&gt;Ella Kaye&lt;/a&gt;, used in examples.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I hadn&amp;rsquo;t come across this before, the helpfile (&lt;a href=&#34;https://rdrr.io/r/datasets/gait.html&#34;&gt;&lt;code&gt;?gait&lt;/code&gt;&lt;/a&gt;) reads:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hip and knee angle (in degrees) through a 20 point movement cycle for 39 boys.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Which is stored as a 3D array, as stated in the helpfile:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A 3-dimensional array with dimensions c(20, 39, 2) giving the &amp;ldquo;Hip Angle&amp;rdquo; and &amp;ldquo;Knee Angle&amp;rdquo; (in degrees) for 39 repetitions of a 20 point gait cycle (over standardized gait times).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/utils/head.html&#39;&gt;head&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;gait&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; , , Variable = Hip Angle&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;        Subject&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; Time    boy1 boy2 boy3 boy4 boy5 boy6 boy7 boy8 boy9 boy10 boy11 boy12 boy13&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.025   37   47   46   37   20   57   46   46   46    35    38    35    34&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.075   36   46   44   36   18   48   38   46   42    34    37    31    31&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.125   33   42   39   27   11   44   33   43   37    29    33    29    27&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.175   29   34   34   20    8   35   25   40   34    28    29    26    23&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.225   23   27   33   15    7   31   18   36   31    19    26    22    19&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.275   18   21   27   15    5   27   15   30   25    15    20    19    15&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;        Subject&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; Time    boy14 boy15 boy16 boy17 boy18 boy19 boy20 boy21 boy22 boy23 boy24 boy25&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.025    43    43    40    51    52    36    35    46    43    55    39    37&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.075    41    37    41    49    46    33    37    38    41    51    38    34&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.125    36    35    36    45    41    28    33    30    37    47    31    30&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.175    31    28    32    39    35    22    27    23    30    41    27    27&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.225    26    26    27    31    31    18    22    17    24    35    21    26&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.275    20    21    20    23    24    13    14    13    16    30    14    19&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;        Subject&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; Time    boy26 boy27 boy28 boy29 boy30 boy31 boy32 boy33 boy34 boy35 boy36 boy37&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.025    36    36    42    38    46    54    52    32    46    46    48    44&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.075    33    33    40    34    47    48    44    28    41    44    42    41&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.125    28    30    40    30    44    44    44    26    38    40    42    38&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.175    22    28    34    23    37    37    33    22    31    35    35    32&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.225    18    21    23    17    29    30    28    19    25    31    30    24&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.275    13    15    15    12    23    27    27    13    20    25    23    18&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;        Subject&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; Time    boy38 boy39&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.025    55    48&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.075    56    50&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.125    51    47&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.175    46    42&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.225    41    37&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.275    36    29&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; , , Variable = Knee Angle&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;        Subject&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; Time    boy1 boy2 boy3 boy4 boy5 boy6 boy7 boy8 boy9 boy10 boy11 boy12 boy13&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.025   10   16   18    5    2   15   13   14   15     9    13     7     9&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.075   15   25   27   14    6   17   16   17   20    22    24     8    14&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.125   18   28   32   16    6   23   22   18   23    25    27    11    16&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.175   18   25   32   17    6   23   17   19   26    21    23    12    15&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.225   15   18   28   10    5   20   12   19   25    10    18     8    15&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.275   14   12   23    8    6   19    9   15   21     9    13     6    12&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;        Subject&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; Time    boy14 boy15 boy16 boy17 boy18 boy19 boy20 boy21 boy22 boy23 boy24 boy25&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.025    15     6    11    24    16    16     7    21    11    12     8    11&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.075    20    11    19    32    20    20    13    24    14    17    12    20&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.125    22    20    30    35    21    22    14    25    14    20    14    22&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.175    22    18    28    33    20    21    17    21    11    20    13    21&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.225    21    13    25    29    18    20    14    16     8    18    12    21&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.275    19     9    17    24    14    20     8     9     5    12     9    17&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;        Subject&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; Time    boy26 boy27 boy28 boy29 boy30 boy31 boy32 boy33 boy34 boy35 boy36 boy37&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.025    16    19    13    11    17    20    18     9     8     9    13    19&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.075    20    26    23    15    25    20    18    12    10    18    18    23&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.125    22    28    30    19    30    22    25    16    17    19    27    26&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.175    21    28    28    20    30    16    23    15    16    19    26    25&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.225    20    24    19    18    27    10    18    14    12    19    25    21&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.275    20    18    10    17    22    10    19    11    10    15    18    18&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;        Subject&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; Time    boy38 boy39&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.025    16    14&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.075    23    25&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.125    28    32&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.175    28    34&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.225    25    30&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.275    21    20&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;With the examples having a nifty data visualisation:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/graphics/plot.default.html&#39;&gt;plot&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nv&#39;&gt;gait&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;[&lt;/span&gt;, &lt;span class=&#39;m&#39;&gt;1&lt;/span&gt;, &lt;span class=&#39;o&#39;&gt;]&lt;/span&gt;, &lt;/span&gt;
&lt;span&gt;  type &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;s&#39;&gt;&#34;b&#34;&lt;/span&gt;,&lt;/span&gt;
&lt;span&gt;  xlim &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/range.html&#39;&gt;range&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;gait&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;[&lt;/span&gt;,,&lt;span class=&#39;m&#39;&gt;1&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;]&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;, &lt;/span&gt;
&lt;span&gt;  ylim &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/range.html&#39;&gt;range&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;gait&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;[&lt;/span&gt;,,&lt;span class=&#39;m&#39;&gt;2&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;]&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;, &lt;/span&gt;
&lt;span&gt;  xlab &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;s&#39;&gt;&#34;Hip Angle&#34;&lt;/span&gt;, &lt;/span&gt;
&lt;span&gt;  ylab &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;s&#39;&gt;&#34;Knee Angle&#34;&lt;/span&gt;, &lt;/span&gt;
&lt;span&gt;  main &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;s&#39;&gt;&#34;&#39;gait&#39; data : Boy 1&#34;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/graphics/mtext.html&#39;&gt;mtext&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;s&#39;&gt;&#34;all other boys&#34;&lt;/span&gt;, &lt;/span&gt;
&lt;span&gt;  col &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;s&#39;&gt;&#34;thistle&#34;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/graphics/grid.html&#39;&gt;grid&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/graphics/matplot.html&#39;&gt;matlines&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nv&#39;&gt;gait&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;[&lt;/span&gt;, &lt;span class=&#39;o&#39;&gt;-&lt;/span&gt;&lt;span class=&#39;m&#39;&gt;1&lt;/span&gt;, &lt;span class=&#39;m&#39;&gt;1&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;]&lt;/span&gt;, &lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nv&#39;&gt;gait&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;[&lt;/span&gt;, &lt;span class=&#39;o&#39;&gt;-&lt;/span&gt;&lt;span class=&#39;m&#39;&gt;1&lt;/span&gt;, &lt;span class=&#39;m&#39;&gt;2&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;]&lt;/span&gt;, &lt;/span&gt;
&lt;span&gt;  type &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;s&#39;&gt;&#34;l&#34;&lt;/span&gt;, &lt;/span&gt;
&lt;span&gt;  lty &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;m&#39;&gt;1&lt;/span&gt;, &lt;/span&gt;
&lt;span&gt;  col &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/grDevices/adjustcolor.html&#39;&gt;adjustcolor&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;s&#39;&gt;&#34;thistle&#34;&lt;/span&gt;, &lt;span class=&#39;m&#39;&gt;1&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;/&lt;/span&gt;&lt;span class=&#39;m&#39;&gt;3&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&#34;figs/gait-plot-1.png&#34; width=&#34;700px&#34; style=&#34;display: block; margin: auto;&#34; /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;It is worth noting the references for this data:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Olshen, R. A., Biden, E. N., Wyatt, M. P., and Sutherland, D. (1989) Gait Analysis and the Bootstrap. Annals of Statistics 17, 4, 1419&amp;ndash;1440. &lt;a href=&#34;https://doi.org/10.1214/AOS/1176347372&#34;&gt;doi:10.1214/AOS/1176347372&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ramsay, J. O., and Silverman, B. W. (2006) Functional Data Analysis, 2nd ed., New York: Springer.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ramsay, J. (2023) fda: Functional Data Analysis. R package version 6.1.4, &lt;a href=&#34;https://CRAN.R-project.org/package=fda&#34;&gt;https://CRAN.R-project.org/package=fda&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;blas-and-lapack-update&#34;&gt;BLAS and LAPACK update&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;The bundled BLAS and LAPACK sources have been updated to those shipped as part of January 2025&amp;rsquo;s LAPACK 3.12.1.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;These help power many linear algebra operations in R, and there will likely be speed improvements and other efficiencies. So, worth installing for that alone.&lt;/p&gt;
&lt;h1 id=&#34;a-note-on-reading-news-files&#34;&gt;A note on reading NEWS files&lt;/h1&gt;
&lt;p&gt;I have tried to read the R NEWS files since about 2017 or 2018. I believe I heard &lt;a href=&#34;https://rdpeng.org/&#34;&gt;Roger Peng&lt;/a&gt; say he read the R NEWS files on the &lt;a href=&#34;https://nssdeviations.com/&#34;&gt;Not So Standard Deviations podcast&lt;/a&gt; with &lt;a href=&#34;https://hilaryparker.com/&#34;&gt;Hilary Parker&lt;/a&gt;. It seemed like a good idea, so I have tried to do the same.&lt;/p&gt;
&lt;p&gt;It usually involves me reading over the NEWS file and looking out for things that seem relevant to me and my work. I don&amp;rsquo;t always understand everything, in fact, I would say I don&amp;rsquo;t understand a lot of it. But every now and again something comes up that is important to me. For example, the NEWS item for &lt;a href=&#34;https://cran.r-project.org/doc/manuals/r-release/NEWS.html&#34;&gt;R 4.0.0&lt;/a&gt; about matrices and arrays:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;matrix objects now also inherit from class &amp;ldquo;array&amp;rdquo;, so e.g., class(diag(1)) is c(&amp;ldquo;matrix&amp;rdquo;, &amp;ldquo;array&amp;rdquo;). This invalidates code incorrectly assuming that class(matrix_obj)) has length one.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;S3 methods for class &amp;ldquo;array&amp;rdquo; are now dispatched for matrix objects.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Resulted in a breaking change in greta, that I was able &lt;a href=&#34;https://github.com/greta-dev/greta/pull/409/files&#34;&gt;to identify and fix&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Another time that I find it useful to know how to look up the NEWS file is remembering when some key new features were introduced. For example, knowing that the native pipe &lt;code&gt;|&amp;gt;&lt;/code&gt; was introduced in 4.1.0, but the underscore &lt;code&gt;_&lt;/code&gt; placeholder was only introduced in 4.2.0 is really useful if I&amp;rsquo;m developing packages to know which version of R to depend on.&lt;/p&gt;
&lt;p&gt;I also often visit the &lt;a href=&#34;https://cran.r-project.org/bin/windows/base/old/&#34;&gt;&amp;ldquo;Previous releases of R for Windows&amp;rdquo;&lt;/a&gt; page to see &lt;em&gt;when&lt;/em&gt; a version of R was released. This is to check if a version of R is more than three years old, which to me, is about old enough that people shouldn&amp;rsquo;t be depending on it on a regular basis, or if they are and it is mission critical, they would also have other things set up to maintain it. The tidyverse maintains backward compatibility with &lt;a href=&#34;https://www.tidyverse.org/blog/2019/04/r-version-support/&#34;&gt;the past 5 (minor) versions of R&lt;/a&gt; - which ends up being about 4 years. I figure 3 years should be good enough for my work.&lt;/p&gt;
&lt;h1 id=&#34;yes-it-is-annoying-to-reinstall-r-packages-again&#34;&gt;Yes, it &lt;strong&gt;is annoying&lt;/strong&gt; to reinstall R packages again.&lt;/h1&gt;
&lt;p&gt;When you install a new &lt;strong&gt;minor version&lt;/strong&gt; of R (that is, when you change its minor version, for example going from 4.1.0 to 4.2.0, not 4.1.0 to 4.1.1), you need to install all your R packages again.&lt;/p&gt;
&lt;p&gt;Sure, it&amp;rsquo;s annoying. But I see it as an opportunity to start afresh. I usually do something like the following&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-r&#34; data-lang=&#34;r&#34;&gt;&lt;span class=&#34;nf&#34;&gt;install.packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;pak&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pak&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;pkg_install&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;tidyverse&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dependencies&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;pkg_install&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;devtools&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dependencies&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;pkg_install&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;naniar&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dependencies&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;pkg_install&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;blogdown&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dependencies&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;pkg_install&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;greta&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dependencies&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;pkg_install&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;brolgar&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dependencies&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;pkg_install&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;targets&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dependencies&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;pkg_install&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;ropensci/geotargets&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dependencies&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;pkg_install&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;milesmcbain/datapasta&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dependencies&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And this gets me 90% of the way there.&lt;/p&gt;
&lt;p&gt;It is worth noting that if you&amp;rsquo;re a windows user, you can use the &lt;a href=&#34;https://talgalili.github.io/installr/&#34;&gt;&lt;code&gt;installr&lt;/code&gt;&lt;/a&gt; package to update R and other dependencies.&lt;/p&gt;
&lt;p&gt;And on that note it&amp;rsquo;s ALSO worth mentioning the &lt;a href=&#34;https://github.com/r-lib/rig&#34;&gt;&lt;code&gt;rig&lt;/code&gt;&lt;/a&gt; command line utility. This allows you to more easily install different, and release versions of R. If you&amp;rsquo;ve seen &lt;a href=&#34;https://github.com/hrbrmstr/RSwitch&#34;&gt;Bob Rudis&amp;rsquo;s RSwitch&lt;/a&gt; software, this is the updated version of this (Bob has archived RSwitch).&lt;/p&gt;
</description>
    </item>
    <item>
      <title>{geotargets} 0.2.0</title>
      <link>https://www.njtierney.com/post/2024/11/27/geotargets-0-2-0/</link>
      <pubDate>Wed, 27 Nov 2024 00:00:00 +0000</pubDate>
      <guid>https://www.njtierney.com/post/2024/11/27/geotargets-0-2-0/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m super stoked to announce &lt;a href=&#34;https://njtierney.github.io/geotargets/&#34;&gt;{geotargets}&lt;/a&gt; version 0.2.0! The &lt;a href=&#34;https://njtierney.github.io/geotargets/&#34;&gt;{geotargets}&lt;/a&gt; package extends &lt;a href=&#34;https://docs.ropensci.org/targets/&#34;&gt;{targets}&lt;/a&gt; to work with geospatial data formats.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d like to firstly acknowledge the strong work by &lt;a href=&#34;https://ericrscott.com/&#34;&gt;Eric Scott&lt;/a&gt; on getting this release ready. I do want to emphasise that while post is on my website, this project is very much a team effort.&lt;/p&gt;
&lt;p&gt;You can download &lt;a href=&#34;https://njtierney.github.io/geotargets/&#34;&gt;{geotargets}&lt;/a&gt; from the R universe like so:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-r&#34; data-lang=&#34;r&#34;&gt;&lt;span class=&#34;nf&#34;&gt;install.packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;geotargets&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;repos&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;https://njtierney.r-universe.dev&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;https://cran.r-project.org&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;why-should-i-use-geotargets-and-targets&#34;&gt;Why should I use geotargets and targets?&lt;/h1&gt;
&lt;p&gt;You could benefit from using targets and geotargets if you do geospatial data analysis involving rasters or shapefiles, specifically with terra or stars R packages. For example, if you are doing large downloads of rasters, then operations like cropping, reprojection, resampling, and masking.&lt;/p&gt;
&lt;p&gt;The main benefit to using targets and geotargets is your analysis will only rerun when you change relevant parts of your data analysis. For example, you might do a lot of geospatial data processing that feeds downstream into a machine learning model to make predictions on bushfire risk. Writing with targets and geotargets means if you change the parts of the code that related to the machine learning components, then only the relevant parts with machine learning would change. This means you can save time by avoiding running computational expensive spatial data processing.&lt;/p&gt;
&lt;p&gt;For more details on what targets is, and why we need geotargets, I would recommend reading the &lt;a href=&#34;https://www.njtierney.com/post/2024/05/27/geotargets-0-1-0/&#34;&gt;0.1.0 release blog post&lt;/a&gt;, as well as &lt;a href=&#34;https://books.ropensci.org/targets/&#34;&gt;reading the {targets} manual&lt;/a&gt;. The &lt;a href=&#34;https://github.com/ropensci/targets/?tab=readme-ov-file#get-started-in-4-minutes&#34;&gt;&amp;ldquo;Get started in 4 minutes&amp;rdquo;&lt;/a&gt; guide to targets is also excellent.&lt;/p&gt;
&lt;h1 id=&#34;main-changes-in-020&#34;&gt;Main changes in 0.2.0?&lt;/h1&gt;
&lt;p&gt;In addition to smaller changes and improvements, there are three main additions in this release:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Support for &lt;a href=&#34;https://books.ropensci.org/targets/dynamic.html#about-dynamic-branching&#34;&gt;dynamic branching&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Preserving spatRaster metadata.&lt;/li&gt;
&lt;li&gt;Support of &lt;code&gt;stars&lt;/code&gt; and &lt;code&gt;stars_proxy&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And very in very exciting news, we have a new hex sticker!&lt;/p&gt;
&lt;p&gt;Thanks to &lt;a href=&#34;https://www.linkedin.com/in/huberthalun/?originalSubdomain=pl&#34;&gt;Hubert Hałun&lt;/a&gt; for their work on getting this together, we are really happy with the new sticker!&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&#34;figs/Geotarget_Hex.png&#34; alt=&#34;geotargets hex sticker&#34; /&gt;
&lt;figcaption aria-hidden=&#34;true&#34;&gt;geotargets hex sticker&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&#34;dynamic-branching&#34;&gt;Dynamic Branching&lt;/h2&gt;
&lt;p&gt;The main addition in this release is a demonstration of using &lt;a href=&#34;https://books.ropensci.org/targets/dynamic.html#about-dynamic-branching&#34;&gt;dynamic branching&lt;/a&gt; using a new &amp;ldquo;target factory&amp;rdquo; function, &lt;a href=&#34;https://njtierney.github.io/geotargets/reference/tar_terra_tiles.html&#34;&gt;&lt;code&gt;tar_terra_tiles()&lt;/code&gt;&lt;/a&gt;. This allows you to break raster operations into tiles, and then perform these operations on the tiles and combine them together. This means we can break computationally intensive raster operations that work in pixel-wise manner over tiled subsets of the raster. This is useful when, for example, loading an entire raster into memory and doing computations on it results in out of memory errors.&lt;/p&gt;
&lt;p&gt;As part of this addition, we created helper functions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://njtierney.github.io/geotargets/reference/tile_helpers.html&#34;&gt;&lt;code&gt;tile_n()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://njtierney.github.io/geotargets/reference/tile_helpers.html&#34;&gt;&lt;code&gt;tile_grid()&lt;/code&gt;&lt;/a&gt;, and&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://njtierney.github.io/geotargets/reference/tile_helpers.html&#34;&gt;&lt;code&gt;tile_blocksize()&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These help us define different extents that we can pass along as different parts of the dynamic branches. You can think of these as tools that we can use to specify how to slice, or tile up, a raster into smaller pieces that we can then do analysis on separately and combine later.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s briefly unpack these, and then show how these would be used in dynamic branching. First let&amp;rsquo;s read in some example elevation data from terra and plot it:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;f&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/system.file.html&#39;&gt;system.file&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;s&#39;&gt;&#34;ex/elev.tif&#34;&lt;/span&gt;, package&lt;span class=&#39;o&#39;&gt;=&lt;/span&gt;&lt;span class=&#39;s&#39;&gt;&#34;terra&#34;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;r&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rspatial.github.io/terra/reference/rast.html&#39;&gt;rast&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;f&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rspatial.github.io/terra/reference/plot.html&#39;&gt;plot&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;r&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&#34;figs/unnamed-chunk-1-1.png&#34; width=&#34;700px&#34; style=&#34;display: block; margin: auto;&#34; /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h3 id=&#34;tile_n&#34;&gt;&lt;code&gt;tile_n()&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;We can use &lt;a href=&#34;https://njtierney.github.io/geotargets/reference/tile_helpers.html&#34;&gt;&lt;code&gt;tile_n()&lt;/code&gt;&lt;/a&gt;, which is the simplest of the three. It produces &lt;em&gt;about&lt;/em&gt; &lt;code&gt;n&lt;/code&gt; tiles in a grid.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;r_tile_4&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://njtierney.github.io/geotargets/reference/tile_helpers.html&#39;&gt;tile_n&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;r&lt;/span&gt;, &lt;span class=&#39;m&#39;&gt;4&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; creating 2 * 2 = 4 tile extents&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;r_tile_4&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; [[1]]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;      xmin      xmax      ymin      ymax &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  5.741667  6.141667 49.816667 50.191667 &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; [[2]]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;      xmin      xmax      ymin      ymax &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  6.141667  6.533333 49.816667 50.191667 &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; [[3]]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;      xmin      xmax      ymin      ymax &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  5.741667  6.141667 49.441667 49.816667 &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; [[4]]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;      xmin      xmax      ymin      ymax &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  6.141667  6.533333 49.441667 49.816667&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;c&#39;&gt;# some plot helpers&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;rect_extent&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;kr&#39;&gt;function&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;x&lt;/span&gt;, &lt;span class=&#39;nv&#39;&gt;...&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;#123;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/graphics/rect.html&#39;&gt;rect&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;x&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;[&lt;/span&gt;&lt;span class=&#39;m&#39;&gt;1&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;]&lt;/span&gt;, &lt;span class=&#39;nv&#39;&gt;x&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;[&lt;/span&gt;&lt;span class=&#39;m&#39;&gt;3&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;]&lt;/span&gt;, &lt;span class=&#39;nv&#39;&gt;x&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;[&lt;/span&gt;&lt;span class=&#39;m&#39;&gt;2&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;]&lt;/span&gt;, &lt;span class=&#39;nv&#39;&gt;x&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;[&lt;/span&gt;&lt;span class=&#39;m&#39;&gt;4&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;]&lt;/span&gt;, &lt;span class=&#39;nv&#39;&gt;...&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;o&#39;&gt;&amp;#125;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;plot_extents&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;kr&#39;&gt;function&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;x&lt;/span&gt;, &lt;span class=&#39;nv&#39;&gt;...&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;#123;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/invisible.html&#39;&gt;invisible&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/lapply.html&#39;&gt;lapply&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;x&lt;/span&gt;, &lt;span class=&#39;nv&#39;&gt;rect_extent&lt;/span&gt;, border &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;s&#39;&gt;&#34;hotpink&#34;&lt;/span&gt;, lwd &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;m&#39;&gt;2&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;o&#39;&gt;&amp;#125;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rspatial.github.io/terra/reference/plot.html&#39;&gt;plot&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;r&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;plot_extents&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;r_tile_4&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&#34;figs/unnamed-chunk-4-1.png&#34; width=&#34;700px&#34; style=&#34;display: block; margin: auto;&#34; /&gt;&lt;/p&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rspatial.github.io/terra/reference/plot.html&#39;&gt;plot&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;r&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://njtierney.github.io/geotargets/reference/tile_helpers.html&#39;&gt;tile_n&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;r&lt;/span&gt;, &lt;span class=&#39;m&#39;&gt;6&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;|&amp;gt;&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;plot_extents&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; creating 2 * 3 = 6 tile extents&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&#34;figs/unnamed-chunk-4-2.png&#34; width=&#34;700px&#34; style=&#34;display: block; margin: auto;&#34; /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h3 id=&#34;tile_grid&#34;&gt;&lt;code&gt;tile_grid()&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;For more control, use &lt;a href=&#34;https://njtierney.github.io/geotargets/reference/tile_helpers.html&#34;&gt;&lt;code&gt;tile_grid()&lt;/code&gt;&lt;/a&gt;, which allows specification of the number of rows and columns to split the raster into. Here we are specify that we want three columns and 1 row:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;r_grid_3x1&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://njtierney.github.io/geotargets/reference/tile_helpers.html&#39;&gt;tile_grid&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;r&lt;/span&gt;, ncol &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;m&#39;&gt;3&lt;/span&gt;, nrow &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;m&#39;&gt;1&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;r_grid_3x1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; [[1]]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;      xmin      xmax      ymin      ymax &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  5.741667  6.008333 49.441667 50.191667 &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; [[2]]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;      xmin      xmax      ymin      ymax &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  6.008333  6.266667 49.441667 50.191667 &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; [[3]]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;      xmin      xmax      ymin      ymax &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  6.266667  6.533333 49.441667 50.191667&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rspatial.github.io/terra/reference/plot.html&#39;&gt;plot&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;r&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;plot_extents&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;r_grid_3x1&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&#34;figs/unnamed-chunk-5-1.png&#34; width=&#34;700px&#34; style=&#34;display: block; margin: auto;&#34; /&gt;&lt;/p&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rspatial.github.io/terra/reference/plot.html&#39;&gt;plot&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;r&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://njtierney.github.io/geotargets/reference/tile_helpers.html&#39;&gt;tile_grid&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;r&lt;/span&gt;, ncol &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;m&#39;&gt;2&lt;/span&gt;, nrow &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;m&#39;&gt;3&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;|&amp;gt;&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;plot_extents&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&#34;figs/unnamed-chunk-5-2.png&#34; width=&#34;700px&#34; style=&#34;display: block; margin: auto;&#34; /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h3 id=&#34;tile_blocksize&#34;&gt;&lt;code&gt;tile_blocksize()&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The third included helper is &lt;a href=&#34;https://njtierney.github.io/geotargets/reference/tile_helpers.html&#34;&gt;&lt;code&gt;tile_blocksize()&lt;/code&gt;&lt;/a&gt;, which tiles by file &lt;strong&gt;block size&lt;/strong&gt;. The &lt;strong&gt;block size&lt;/strong&gt; is a property of raster files, and is the number of pixels (in the x and y direction) that is read into memory at a time. Tiling by multiples of block size may therefore be more efficient because only one block should need to be loaded to create each tile target. You can find the blocksize with &lt;code&gt;fileBlocksize&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rspatial.github.io/terra/reference/readwrite.html&#39;&gt;fileBlocksize&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;r&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;      rows cols&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; [1,]   43   95&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This tells us that it reads in the raster in 43x95 pixel sizes.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;tile_blocksize&lt;/code&gt; function is similar to &lt;code&gt;tile_grid&lt;/code&gt;, except instead of saying how many rows and columns, we specify in units of blocksize.&lt;/p&gt;
&lt;p&gt;If we just run &lt;a href=&#34;https://njtierney.github.io/geotargets/reference/tile_helpers.html&#34;&gt;&lt;code&gt;tile_blocksize()&lt;/code&gt;&lt;/a&gt; on &lt;code&gt;r&lt;/code&gt; we get the extents of the specified blocksize:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://njtierney.github.io/geotargets/reference/tile_helpers.html&#39;&gt;tile_blocksize&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;r&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; [[1]]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;      xmin      xmax      ymin      ymax &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  5.741667  6.533333 49.833333 50.191667 &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; [[2]]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;      xmin      xmax      ymin      ymax &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  5.741667  6.533333 49.475000 49.833333 &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; [[3]]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;      xmin      xmax      ymin      ymax &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  5.741667  6.533333 49.441667 49.475000&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Which is the same as specifying blocksize for row and column at unit 1:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;r_block_size_1x1&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://njtierney.github.io/geotargets/reference/tile_helpers.html&#39;&gt;tile_blocksize&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;r&lt;/span&gt;, n_blocks_row &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;m&#39;&gt;1&lt;/span&gt;, n_blocks_col &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;m&#39;&gt;1&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;r_block_size_1x1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; [[1]]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;      xmin      xmax      ymin      ymax &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  5.741667  6.533333 49.833333 50.191667 &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; [[2]]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;      xmin      xmax      ymin      ymax &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  5.741667  6.533333 49.475000 49.833333 &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; [[3]]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;      xmin      xmax      ymin      ymax &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  5.741667  6.533333 49.441667 49.475000&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rspatial.github.io/terra/reference/plot.html&#39;&gt;plot&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;r&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;plot_extents&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;r_block_size_1x1&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&#34;figs/unnamed-chunk-8-1.png&#34; width=&#34;700px&#34; style=&#34;display: block; margin: auto;&#34; /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Here the block size is the same size for the first two blocks, and then a much more narrow block. This is different to the two other tile methods.&lt;/p&gt;
&lt;p&gt;Here the column block size is the full width of the raster.&lt;/p&gt;
&lt;p&gt;So we could instead have the blocksize extent be written out to 2 blocks in a row, and 1 block size for the columns:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;r_block_size_2x1&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://njtierney.github.io/geotargets/reference/tile_helpers.html&#39;&gt;tile_blocksize&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;r&lt;/span&gt;, n_blocks_row &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;m&#39;&gt;2&lt;/span&gt;, n_blocks_col &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;m&#39;&gt;1&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;r_block_size_2x1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; [[1]]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;      xmin      xmax      ymin      ymax &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  5.741667  6.533333 49.475000 50.191667 &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; [[2]]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;      xmin      xmax      ymin      ymax &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  5.741667  6.533333 49.441667 49.475000&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rspatial.github.io/terra/reference/plot.html&#39;&gt;plot&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;r&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;plot_extents&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;r_block_size_2x1&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&#34;figs/unnamed-chunk-9-1.png&#34; width=&#34;700px&#34; style=&#34;display: block; margin: auto;&#34; /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;This only works when the &lt;code&gt;SpatRaster&lt;/code&gt; points to a file&amp;mdash;in-memory rasters have no inherent block size.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rspatial.github.io/terra/reference/sources.html&#39;&gt;sources&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;r&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; [1] &#34;/Users/nick/Library/R/arm64/4.4/library/terra/ex/elev.tif&#34;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#force into memory&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;r2&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;nv&#39;&gt;r&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;+&lt;/span&gt; &lt;span class=&#39;m&#39;&gt;0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rspatial.github.io/terra/reference/sources.html&#39;&gt;sources&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;r2&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; [1] &#34;&#34;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#this now errors&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://njtierney.github.io/geotargets/reference/tile_helpers.html&#39;&gt;tile_blocksize&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;r2&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; Error: [aggregate] values in argument &#39;fact&#39; should be &amp;gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;For more detail on using this in targets, please see the geotargets vignette, &lt;a href=&#34;https://njtierney.github.io/geotargets/articles/tar_terra_tiles.html&#34;&gt;&amp;ldquo;Dynamic branching with raster tiles&amp;rdquo;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;preserving-spatraster-metadata&#34;&gt;Preserving spatRaster metadata&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://njtierney.github.io/geotargets/reference/tar_terra_rast.html&#34;&gt;&lt;code&gt;tar_terra_rast()&lt;/code&gt;&lt;/a&gt; gains a &lt;code&gt;preserve_metadata&lt;/code&gt; option that when set to &lt;code&gt;&amp;quot;zip&amp;quot;&lt;/code&gt; reads/writes targets as zip archives that include aux.json &amp;ldquo;sidecar&amp;rdquo; files sometimes written by &lt;code&gt;terra&lt;/code&gt; (&lt;a href=&#34;https://github.com/njtierney/geotargets/issues/58&#34;&gt;#58&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&#34;support-of-stars-and-stars_proxy&#34;&gt;Support of &lt;code&gt;stars&lt;/code&gt; and &lt;code&gt;stars_proxy&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;We have created &lt;a href=&#34;https://njtierney.github.io/geotargets/reference/tar_stars.html&#34;&gt;&lt;code&gt;tar_stars()&lt;/code&gt;&lt;/a&gt; and &lt;a href=&#34;https://njtierney.github.io/geotargets/reference/tar_stars.html&#34;&gt;&lt;code&gt;tar_stars_proxy()&lt;/code&gt;&lt;/a&gt; that create &lt;code&gt;stars&lt;/code&gt; and &lt;code&gt;stars_proxy&lt;/code&gt; objects, respectively. These are currently experimental.&lt;/p&gt;
&lt;h1 id=&#34;minor-changes-in-020&#34;&gt;Minor changes in 0.2.0&lt;/h1&gt;
&lt;p&gt;Other changes include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Created utility function &lt;a href=&#34;https://njtierney.github.io/geotargets/reference/set_window.html&#34;&gt;&lt;code&gt;set_window()&lt;/code&gt;&lt;/a&gt; mostly for internal use within &lt;a href=&#34;https://njtierney.github.io/geotargets/reference/tar_terra_tiles.html&#34;&gt;&lt;code&gt;tar_terra_tiles()&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Removes the &lt;code&gt;iteration&lt;/code&gt; argument from all &lt;code&gt;tar_*()&lt;/code&gt; functions. &lt;code&gt;iteration&lt;/code&gt; now hard-coded as &lt;code&gt;&amp;quot;list&amp;quot;&lt;/code&gt; since it is the only option that works (for now at least).&lt;/li&gt;
&lt;li&gt;Added the &lt;code&gt;description&lt;/code&gt; argument to all &lt;code&gt;tar_*()&lt;/code&gt; functions which is passed to &lt;a href=&#34;https://docs.ropensci.org/targets/reference/tar_target.html&#34;&gt;&lt;code&gt;tar_target()&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Suppressed the warning &amp;ldquo;[rast] skipped sub-datasets&amp;rdquo; from &lt;a href=&#34;https://njtierney.github.io/geotargets/reference/tar_terra_sprc.html&#34;&gt;&lt;code&gt;tar_terra_sprc()&lt;/code&gt;&lt;/a&gt;, which is misleading in this context (&lt;a href=&#34;https://github.com/njtierney/geotargets/issues/92&#34;&gt;#92&lt;/a&gt;, &lt;a href=&#34;https://github.com/njtierney/geotargets/issues/104&#34;&gt;#104&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Requires GDAL 3.1 or greater to use &amp;ldquo;ESRI Shapefile&amp;rdquo; driver in &lt;a href=&#34;https://njtierney.github.io/geotargets/reference/tar_terra_vect.html&#34;&gt;&lt;code&gt;tar_terra_vect()&lt;/code&gt;&lt;/a&gt; (&lt;a href=&#34;https://github.com/njtierney/geotargets/issues/71&#34;&gt;#71&lt;/a&gt;, &lt;a href=&#34;https://github.com/njtierney/geotargets/pull/97&#34;&gt;#97&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;geotargets&lt;/code&gt; now requires &lt;code&gt;targets&lt;/code&gt; version 1.8.0 or higher&lt;/li&gt;
&lt;li&gt;&lt;code&gt;terra&lt;/code&gt; (&amp;gt;= 1.7.71), &lt;code&gt;withr&lt;/code&gt; (&amp;gt;= 3.0.0), and &lt;code&gt;zip&lt;/code&gt; are now required dependencies of &lt;code&gt;geotargets&lt;/code&gt; (moved from &lt;code&gt;Suggests&lt;/code&gt; to &lt;code&gt;Imports&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;whats-next&#34;&gt;What&amp;rsquo;s next?&lt;/h1&gt;
&lt;p&gt;We have finished developing the main milestones for geotargets, but will continue actively developing it. Soon we will be submitting the package for review by rOpenSci, and subsequently submit the work to the Journal of Open Source Software (JOSS), and then submit to CRAN.&lt;/p&gt;
&lt;p&gt;Currently, the next release will focus on adding support for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/njtierney/geotargets/issues/110&#34;&gt;Add support for ArcGIS services using {arcgislayers}&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/njtierney/geotargets/issues/112&#34;&gt;Adding support for tar_terra_rast on cloud storage&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/njtierney/geotargets/issues/48&#34;&gt;explore support for {gdalraster}&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/njtierney/geotargets/issues/42&#34;&gt;Add support for terra SpatVectorProxy, and format=&amp;quot;file&amp;rdquo; for SpatRaster&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can see the &lt;a href=&#34;https://github.com/njtierney/geotargets/issues&#34;&gt;full list of issues&lt;/a&gt; for more detail on what we are working on.&lt;/p&gt;
&lt;h1 id=&#34;thanks&#34;&gt;Thanks&lt;/h1&gt;
&lt;p&gt;We would like to thank the R Consortium for generously supporting this project, &amp;ldquo;&lt;a href=&#34;https://github.com/cct-datascience/geotargets-isc-proposal&#34;&gt;{geotargets}: Enabling geospatial workflow management with {targets}&amp;quot;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We would also like to thank &lt;a href=&#34;https://github.com/mdsumner&#34;&gt;Michael Sumner&lt;/a&gt;, &lt;a href=&#34;https://github.com/anthonynorth&#34;&gt;Anthony North&lt;/a&gt;, and &lt;a href=&#34;https://milesmcbain.xyz/&#34;&gt;Miles McBain&lt;/a&gt; for their helpful discussions throughout, as well as &lt;a href=&#34;https://wlandau.github.io/&#34;&gt;Will Landau&lt;/a&gt; for writing targets, and being incredibly responsive and helpful to the issues and questions we have asked as we wrote &lt;a href=&#34;https://njtierney.github.io/geotargets/&#34;&gt;{geotargets}&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>{geotargets} 0.1.0</title>
      <link>https://www.njtierney.com/post/2024/05/27/geotargets-0-1-0/</link>
      <pubDate>Mon, 27 May 2024 00:00:00 +0000</pubDate>
      <guid>https://www.njtierney.com/post/2024/05/27/geotargets-0-1-0/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m very happy to announce &lt;a href=&#34;https://njtierney.github.io/geotargets/&#34;&gt;{geotargets}&lt;/a&gt; version 0.1.0! The &lt;a href=&#34;https://njtierney.github.io/geotargets/&#34;&gt;{geotargets}&lt;/a&gt; package extends &lt;a href=&#34;https://docs.ropensci.org/targets/&#34;&gt;{targets}&lt;/a&gt; to work with geospatial data formats. Version 0.1.0 supports &lt;a href=&#34;https://rspatial.github.io/terra/reference/vect.html&#34;&gt;&lt;code&gt;terra::vect()&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;https://rspatial.github.io/terra/reference/rast.html&#34;&gt;&lt;code&gt;terra::rast()&lt;/code&gt;&lt;/a&gt; and &lt;a href=&#34;https://rspatial.github.io/terra/reference/sprc.html&#34;&gt;&lt;code&gt;terra::sprc()&lt;/code&gt;&lt;/a&gt; formats. This R package is only possible due to the great work by &lt;a href=&#34;https://ericrscott.com/&#34;&gt;Eric Scott&lt;/a&gt; and &lt;a href=&#34;https://humus.rocks/&#34;&gt;Andrew Brown&lt;/a&gt;. While this blog post is on my website, I want to emphasise that this project is very much a team effort.&lt;/p&gt;
&lt;p&gt;You can download &lt;a href=&#34;https://njtierney.github.io/geotargets/&#34;&gt;{geotargets}&lt;/a&gt; from the R universe like so:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-r&#34; data-lang=&#34;r&#34;&gt;&lt;span class=&#34;nf&#34;&gt;install.packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;geotargets&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;repos&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;https://njtierney.r-universe.dev&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;https://cran.r-project.org&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;what-is-targets-why-do-i-need-geotargets&#34;&gt;What is targets? Why do I need geotargets?&lt;/h1&gt;
&lt;p&gt;The targets package is an R package for managing analytic pipelines. It means that you can write out an analysis in a specific manner, and then as you update code, it will only rerun the necessary parts. Essentially it helps you avoid running large pieces of analysis when you don&amp;rsquo;t need to. To learn more about targets, I&amp;rsquo;d highly recommend &lt;a href=&#34;https://books.ropensci.org/targets/&#34;&gt;reading the {targets} manual&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s show an example. Let&amp;rsquo;s say we want to get an example raster file from &lt;a href=&#34;https://rspatial.github.io/terra/&#34;&gt;{terra}&lt;/a&gt;, we can do the following:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;terra_rast_example&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/system.file.html&#39;&gt;system.file&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;s&#39;&gt;&#34;ex/elev.tif&#34;&lt;/span&gt;, &lt;/span&gt;
&lt;span&gt;  package &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;s&#39;&gt;&#34;terra&#34;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;o&#39;&gt;)&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;|&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nf&#39;&gt;terra&lt;/span&gt;&lt;span class=&#39;nf&#39;&gt;::&lt;/span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rspatial.github.io/terra/reference/rast.html&#39;&gt;rast&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;terra_rast_example&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; class       : SpatRaster &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; dimensions  : 90, 95, 1  (nrow, ncol, nlyr)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; resolution  : 0.008333333, 0.008333333  (x, y)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; extent      : 5.741667, 6.533333, 49.44167, 50.19167  (xmin, xmax, ymin, ymax)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; coord. ref. : lon/lat WGS 84 (EPSG:4326) &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; source      : elev.tif &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; name        : elevation &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; min value   :       141 &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; max value   :       547&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Here is the equivalent code in a targets pipeline - the reason we want to use &lt;a href=&#34;https://books.ropensci.org/targets/&#34;&gt;{targets}&lt;/a&gt; here is we save the results so we don&amp;rsquo;t need to run them again. In this case the example code doesn&amp;rsquo;t take long to run. But imagine reading in the raster was hugely time and computer expensive and we didn&amp;rsquo;t want to do it again. The &lt;a href=&#34;https://books.ropensci.org/targets/&#34;&gt;{targets}&lt;/a&gt; package stores the information so we can just read it back in later, and if we try and run the code again it will not update the code unless the data input has changed. Neat, right?&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;kr&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/library.html&#39;&gt;library&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;&lt;a href=&#39;https://docs.ropensci.org/targets/&#39;&gt;targets&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://docs.ropensci.org/targets/reference/tar_dir.html&#39;&gt;tar_dir&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&#39;c&#39;&gt;# tar_dir() runs code from a temporary directory.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://docs.ropensci.org/targets/reference/tar_script.html&#39;&gt;tar_script&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;&amp;#123;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;    &lt;span class=&#39;kr&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/library.html&#39;&gt;library&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;&lt;a href=&#39;https://docs.ropensci.org/targets/&#39;&gt;targets&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;    &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/list.html&#39;&gt;list&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;      &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://docs.ropensci.org/targets/reference/tar_target.html&#39;&gt;tar_target&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;        &lt;span class=&#39;nv&#39;&gt;terra_rast_example&lt;/span&gt;,&lt;/span&gt;
&lt;span&gt;        &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/system.file.html&#39;&gt;system.file&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;s&#39;&gt;&#34;ex/elev.tif&#34;&lt;/span&gt;, package &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;s&#39;&gt;&#34;terra&#34;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;|&amp;gt;&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;terra&lt;/span&gt;&lt;span class=&#39;nf&#39;&gt;::&lt;/span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rspatial.github.io/terra/reference/rast.html&#39;&gt;rast&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;      &lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;    &lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;o&#39;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://docs.ropensci.org/targets/reference/tar_make.html&#39;&gt;tar_make&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nv&#39;&gt;x&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://docs.ropensci.org/targets/reference/tar_read.html&#39;&gt;tar_read&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;terra_rast_example&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nv&#39;&gt;x&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;o&#39;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #BB0000;&#39;&gt;▶ dispatched target terra_rast_example&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;&lt;span style=&#39;color: #BB0000;&#39;&gt;#&amp;gt; ● completed target terra_rast_example [1.196 seconds]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;&lt;span style=&#39;color: #BB0000;&#39;&gt;#&amp;gt; ▶ ended pipeline [1.825 seconds]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;&lt;span style=&#39;color: #BB0000;&#39;&gt;#&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; class       : SpatRaster&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; Error: external pointer is not valid&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;We get an error!&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Error: external pointer is not valid
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is a relatively common gotcha moment when using libraries like &lt;a href=&#34;https://rspatial.github.io/terra/&#34;&gt;{terra}&lt;/a&gt;. This is due to limitations with its underlying C++ implementation. There are specific ways to write and read these objects. See &lt;code&gt;?terra&lt;/code&gt; for details.&lt;/p&gt;
&lt;p&gt;But how do we use &lt;a href=&#34;https://njtierney.github.io/geotargets/&#34;&gt;{geotargets}&lt;/a&gt; to help with this? It helps handle these write and read steps, so you don&amp;rsquo;t have to worry about them and can use targets as you are used to.&lt;/p&gt;
&lt;p&gt;So instead of &lt;a href=&#34;https://docs.ropensci.org/targets/reference/tar_target.html&#34;&gt;&lt;code&gt;tar_target()&lt;/code&gt;&lt;/a&gt;, you use &lt;a href=&#34;https://njtierney.github.io/geotargets/reference/tar_terra_rast.html&#34;&gt;&lt;code&gt;tar_terra_rast()&lt;/code&gt;&lt;/a&gt; to save a &lt;a href=&#34;https://rspatial.github.io/terra/&#34;&gt;{terra}&lt;/a&gt; raster:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;kr&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/library.html&#39;&gt;library&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;&lt;a href=&#39;https://docs.ropensci.org/targets/&#39;&gt;targets&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://docs.ropensci.org/targets/reference/tar_dir.html&#39;&gt;tar_dir&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&#39;c&#39;&gt;# tar_dir() runs code from a temporary directory.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://docs.ropensci.org/targets/reference/tar_script.html&#39;&gt;tar_script&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;&amp;#123;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;    &lt;span class=&#39;kr&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/library.html&#39;&gt;library&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;&lt;a href=&#39;https://docs.ropensci.org/targets/&#39;&gt;targets&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;    &lt;span class=&#39;kr&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/library.html&#39;&gt;library&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;&lt;a href=&#39;https://github.com/njtierney/geotargets&#39;&gt;geotargets&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;    &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/list.html&#39;&gt;list&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;      &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://njtierney.github.io/geotargets/reference/tar_terra_rast.html&#39;&gt;tar_terra_rast&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;        &lt;span class=&#39;nv&#39;&gt;terra_rast_example&lt;/span&gt;,&lt;/span&gt;
&lt;span&gt;        &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/system.file.html&#39;&gt;system.file&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;s&#39;&gt;&#34;ex/elev.tif&#34;&lt;/span&gt;, package &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;s&#39;&gt;&#34;terra&#34;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;|&amp;gt;&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;terra&lt;/span&gt;&lt;span class=&#39;nf&#39;&gt;::&lt;/span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rspatial.github.io/terra/reference/rast.html&#39;&gt;rast&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;      &lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;    &lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;o&#39;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://docs.ropensci.org/targets/reference/tar_make.html&#39;&gt;tar_make&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nv&#39;&gt;x&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://docs.ropensci.org/targets/reference/tar_read.html&#39;&gt;tar_read&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;terra_rast_example&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nv&#39;&gt;x&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;o&#39;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #BB0000;&#39;&gt;▶ dispatched target terra_rast_example&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;&lt;span style=&#39;color: #BB0000;&#39;&gt;#&amp;gt; ● completed target terra_rast_example [0.006 seconds]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;&lt;span style=&#39;color: #BB0000;&#39;&gt;#&amp;gt; ▶ ended pipeline [0.061 seconds]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;&lt;span style=&#39;color: #BB0000;&#39;&gt;#&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; class       : SpatRaster &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; dimensions  : 90, 95, 1  (nrow, ncol, nlyr)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; resolution  : 0.008333333, 0.008333333  (x, y)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; extent      : 5.741667, 6.533333, 49.44167, 50.19167  (xmin, xmax, ymin, ymax)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; coord. ref. : lon/lat WGS 84 (EPSG:4326) &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; source      : terra_rast_example &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; name        : elevation &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; min value   :       141 &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; max value   :       547&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Similarly, there are &lt;a href=&#34;https://njtierney.github.io/geotargets/reference/tar_terra_vect.html&#34;&gt;&lt;code&gt;tar_terra_vect()&lt;/code&gt;&lt;/a&gt; and &lt;a href=&#34;https://njtierney.github.io/geotargets/reference/tar_terra_sprc.html&#34;&gt;&lt;code&gt;tar_terra_sprc()&lt;/code&gt;&lt;/a&gt; for dealing with vector (shapefile) and sprc (collections of rasters). See the &lt;a href=&#34;https://github.com/njtierney/geotargets?tab=readme-ov-file#examples&#34;&gt;README example&lt;/a&gt; for more information.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;d like to see these functions being used in a more practical context, see the &lt;a href=&#34;https://github.com/njtierney/demo-geotargets&#34;&gt;demo-geotargets&lt;/a&gt; repository.&lt;/p&gt;
&lt;h1 id=&#34;whats-next&#34;&gt;What&amp;rsquo;s next?&lt;/h1&gt;
&lt;p&gt;We are actively developing &lt;a href=&#34;https://njtierney.github.io/geotargets/&#34;&gt;{geotargets}&lt;/a&gt;, and the next release will focus on adding support for &lt;a href=&#34;https://github.com/njtierney/geotargets/pull/76&#34;&gt;splitting rasters into tiles&lt;/a&gt;, &lt;a href=&#34;https://github.com/njtierney/geotargets/pull/63&#34;&gt;preserving SpatRaster metadata&lt;/a&gt;, and adding &lt;a href=&#34;https://github.com/njtierney/geotargets/pull/33&#34;&gt;support for {stars}&lt;/a&gt;. You can see the &lt;a href=&#34;https://github.com/njtierney/geotargets/issues&#34;&gt;full list of issues&lt;/a&gt; for more detail on what we are working on.&lt;/p&gt;
&lt;h1 id=&#34;thanks&#34;&gt;Thanks&lt;/h1&gt;
&lt;p&gt;We have recently generously received support from the R Consortium for our project, &lt;a href=&#34;https://github.com/cct-datascience/geotargets-isc-proposal&#34;&gt;&amp;quot;{geotargets}: Enabling geospatial workflow management with {targets}&amp;quot;&lt;/a&gt;, and so we would like to thank them for their support.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d also like to thank &lt;a href=&#34;https://github.com/mdsumner&#34;&gt;Michael Sumner&lt;/a&gt;, &lt;a href=&#34;https://github.com/anthonynorth&#34;&gt;Anthony North&lt;/a&gt;, and &lt;a href=&#34;https://milesmcbain.xyz/&#34;&gt;Miles McBain&lt;/a&gt; for their helpful discussions, as well as &lt;a href=&#34;https://wlandau.github.io/&#34;&gt;Will Landau&lt;/a&gt; for writing targets, and being incredibly responsive and helpful to the issues and questions we have asked as we wrote &lt;a href=&#34;https://njtierney.github.io/geotargets/&#34;&gt;{geotargets}&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Find Out How many Times Faster your Code is</title>
      <link>https://www.njtierney.com/post/2024/05/17/summary-benchmark/</link>
      <pubDate>Fri, 17 May 2024 00:00:00 +0000</pubDate>
      <guid>https://www.njtierney.com/post/2024/05/17/summary-benchmark/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;
&lt;p&gt;&lt;img src=&#34;blinds.jpg&#34; width=&#34;700px&#34; style=&#34;display: block; margin: auto;&#34; /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;My venetian blinds, in black and white&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I recently watched &lt;a href=&#34;https://josiahparry.com/&#34;&gt;Josiah Parry&amp;rsquo;s&lt;/a&gt; wonderful video, &lt;a href=&#34;https://www.youtube.com/watch?v=-v9qaqaj4Ug&#34;&gt;&amp;ldquo;Making R 300x times faster!&amp;quot;&lt;/a&gt; It&amp;rsquo;s a great demonstration of how to rewrite code to be faster, and it&amp;rsquo;s worth your time. He rewrites some R code to be faster, then improves the speed again by writing some Rust code, which is called from R. He gets a 300 times speedup, which is really awesome.&lt;/p&gt;
&lt;p&gt;Then someone writes in with an example of some code that is even faster than that, just using R code. It ends up being about 6 times faster than his Rust code. So a (300x6) 2000 times speed up. The main thing that helped with that was ensuring to vectorise your R code. Essentially, not working on the rows, but instead working on the columns.&lt;/p&gt;
&lt;p&gt;Throughout the video Josiah makes good use of the &lt;a href=&#34;https://github.com/r-lib/bench&#34;&gt;&lt;code&gt;bench&lt;/code&gt;&lt;/a&gt; R package to evaluate how much faster your code is. This idea is called &amp;ldquo;microbenchmarking&amp;rdquo;, and it involves running your code many times to evaluate how much faster it is than some other option. The reason you want to run your code many times is there is often variation around the runtimes in your code, so you don&amp;rsquo;t just want to base your improvements around a single measurement. It&amp;rsquo;s a general standard approach to attempt tp truly compare your approach to another.&lt;/p&gt;
&lt;p&gt;All this being said, you should be wary of trying to make your code fast first without good reason. You want to make sure your code does the right thing first. Don&amp;rsquo;t just start trying to write performant code. Or as &lt;a href=&#34;https://en.wikiquote.org/wiki/Donald_Knuth&#34;&gt;Donald Knuth&lt;/a&gt; says:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;The real problem is that programmers have spent far too much time worrying about efficiency in the wrong places and at the wrong times; &lt;strong&gt;premature optimization is the root of all evil (or at least most of it) in programming.&lt;/strong&gt;&amp;rdquo;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you want to learn more about how to speed up your code, I think it&amp;rsquo;s worthwhile reading up on the &lt;a href=&#34;https://adv-r.hadley.nz/perf-measure.html&#34;&gt;measuring performance&lt;/a&gt; chapter in Advanced R.&lt;/p&gt;
&lt;h1 id=&#34;an-example-microbenchmark&#34;&gt;An example microbenchmark&lt;/h1&gt;
&lt;p&gt;Let&amp;rsquo;s take an example from the &lt;a href=&#34;https://naniar.njtierney.com/&#34;&gt;&lt;code&gt;naniar&lt;/code&gt;&lt;/a&gt; package. I&amp;rsquo;ll give more detail of this story of this optimisation at the end of this section. For the moment, let&amp;rsquo;s say we want to get the number of missing values in a row of a data frame. We can do something like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;kr&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/library.html&#39;&gt;library&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;&lt;a href=&#39;https://dplyr.tidyverse.org&#39;&gt;dplyr&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; Attaching package: &#39;dplyr&#39;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; The following objects are masked from &#39;package:stats&#39;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;     filter, lag&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; The following objects are masked from &#39;package:base&#39;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;     intersect, setdiff, setequal, union&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;my_n_miss&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;kr&#39;&gt;function&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;data&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;&amp;#123;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nv&#39;&gt;data&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;|&amp;gt;&lt;/span&gt; &lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://dplyr.tidyverse.org/reference/rowwise.html&#39;&gt;rowwise&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;|&amp;gt;&lt;/span&gt; &lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://dplyr.tidyverse.org/reference/mutate.html&#39;&gt;mutate&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;    n_miss &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/sum.html&#39;&gt;sum&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/NA.html&#39;&gt;is.na&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://dplyr.tidyverse.org/reference/c_across.html&#39;&gt;c_across&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://tidyselect.r-lib.org/reference/everything.html&#39;&gt;everything&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;o&#39;&gt;)&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;|&amp;gt;&lt;/span&gt; &lt;/span&gt;
&lt;span&gt;    &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://dplyr.tidyverse.org/reference/group_by.html&#39;&gt;ungroup&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;o&#39;&gt;&amp;#125;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;my_n_miss&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;airquality&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;# A tibble: 153 × 7&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;    Ozone Solar.R  Wind  Temp Month   Day n_miss&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;    &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;int&amp;gt;&lt;/span&gt;   &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;int&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dbl&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;int&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;int&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;int&amp;gt;&lt;/span&gt;  &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;int&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 1&lt;/span&gt;    41     190   7.4    67     5     1      0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 2&lt;/span&gt;    36     118   8      72     5     2      0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 3&lt;/span&gt;    12     149  12.6    74     5     3      0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 4&lt;/span&gt;    18     313  11.5    62     5     4      0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 5&lt;/span&gt;    &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;      &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;  14.3    56     5     5      2&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 6&lt;/span&gt;    28      &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;  14.9    66     5     6      1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 7&lt;/span&gt;    23     299   8.6    65     5     7      0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 8&lt;/span&gt;    19      99  13.8    59     5     8      0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 9&lt;/span&gt;     8      19  20.1    61     5     9      0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;10&lt;/span&gt;    &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;     194   8.6    69     5    10      1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;# ℹ 143 more rows&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;But we can speed this up using &lt;a href=&#34;https://rdrr.io/r/base/colSums.html&#34;&gt;&lt;code&gt;rowSums()&lt;/code&gt;&lt;/a&gt; instead:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;new_n_miss&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;kr&#39;&gt;function&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;data&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;&amp;#123;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nv&#39;&gt;n_misses&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/colSums.html&#39;&gt;rowSums&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/NA.html&#39;&gt;is.na&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;data&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nv&#39;&gt;data&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;|&amp;gt;&lt;/span&gt; &lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://dplyr.tidyverse.org/reference/mutate.html&#39;&gt;mutate&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;    n_miss &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nv&#39;&gt;n_misses&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;o&#39;&gt;)&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;|&amp;gt;&lt;/span&gt; &lt;/span&gt;
&lt;span&gt;    &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://tibble.tidyverse.org/reference/as_tibble.html&#39;&gt;as_tibble&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;o&#39;&gt;&amp;#125;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;new_n_miss&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;airquality&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;# A tibble: 153 × 7&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;    Ozone Solar.R  Wind  Temp Month   Day n_miss&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;    &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;int&amp;gt;&lt;/span&gt;   &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;int&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dbl&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;int&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;int&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;int&amp;gt;&lt;/span&gt;  &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dbl&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 1&lt;/span&gt;    41     190   7.4    67     5     1      0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 2&lt;/span&gt;    36     118   8      72     5     2      0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 3&lt;/span&gt;    12     149  12.6    74     5     3      0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 4&lt;/span&gt;    18     313  11.5    62     5     4      0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 5&lt;/span&gt;    &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;      &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;  14.3    56     5     5      2&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 6&lt;/span&gt;    28      &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;  14.9    66     5     6      1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 7&lt;/span&gt;    23     299   8.6    65     5     7      0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 8&lt;/span&gt;    19      99  13.8    59     5     8      0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 9&lt;/span&gt;     8      19  20.1    61     5     9      0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;10&lt;/span&gt;    &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;     194   8.6    69     5    10      1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;# ℹ 143 more rows&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;my_n_miss&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;airquality&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;# A tibble: 153 × 7&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;    Ozone Solar.R  Wind  Temp Month   Day n_miss&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;    &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;int&amp;gt;&lt;/span&gt;   &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;int&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dbl&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;int&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;int&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;int&amp;gt;&lt;/span&gt;  &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;int&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 1&lt;/span&gt;    41     190   7.4    67     5     1      0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 2&lt;/span&gt;    36     118   8      72     5     2      0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 3&lt;/span&gt;    12     149  12.6    74     5     3      0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 4&lt;/span&gt;    18     313  11.5    62     5     4      0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 5&lt;/span&gt;    &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;      &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;  14.3    56     5     5      2&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 6&lt;/span&gt;    28      &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;  14.9    66     5     6      1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 7&lt;/span&gt;    23     299   8.6    65     5     7      0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 8&lt;/span&gt;    19      99  13.8    59     5     8      0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 9&lt;/span&gt;     8      19  20.1    61     5     9      0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;10&lt;/span&gt;    &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;     194   8.6    69     5    10      1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;# ℹ 143 more rows&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;We can measure the speed using &lt;a href=&#34;http://bench.r-lib.org/reference/mark.html&#34;&gt;&lt;code&gt;bench::mark()&lt;/code&gt;&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;kr&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/library.html&#39;&gt;library&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;&lt;a href=&#39;https://bench.r-lib.org/&#39;&gt;bench&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;bm&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://bench.r-lib.org/reference/mark.html&#39;&gt;mark&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  old &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;my_n_miss&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;airquality&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;,&lt;/span&gt;
&lt;span&gt;  new &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;new_n_miss&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;airquality&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;bm&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;# A tibble: 2 × 6&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   expression      min   median `itr/sec` mem_alloc `gc/sec`&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;bch:expr&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;bch:tm&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;bch:tm&amp;gt;&lt;/span&gt;     &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dbl&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;bch:byt&amp;gt;&lt;/span&gt;    &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dbl&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;1&lt;/span&gt; old          23.9ms   23.9ms      41.8   355.5KB    334. &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;2&lt;/span&gt; new         347.5µs  384.5µs    &lt;span style=&#39;text-decoration: underline;&#39;&gt;2&lt;/span&gt;385.     81.8KB     34.8&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This runs the code at least twice, and prints out the amount of time it takes to run the code provided on the right hand side of &amp;ldquo;old&amp;rdquo; and &amp;ldquo;new&amp;rdquo;. But you can name them whatever you want.&lt;/p&gt;
&lt;p&gt;Now, it can be kind of hard to see just &lt;em&gt;how much&lt;/em&gt; faster this is, if you just look at comparing the times, as the times are given here in&amp;hellip;well, actually I&amp;rsquo;m not sure why our friend from the greek alphabet mu, µ, from the greek alphabet is here, actually? If, like me, you needed to &lt;a href=&#34;https://simple.wikipedia.org/wiki/Order_of_magnitude&#34;&gt;double check the standard measures of order of magnitude wiki page&lt;/a&gt;, you might not know that &amp;ldquo;ms&amp;rdquo; means milli - or one thousandth, and µ means &amp;ldquo;micro&amp;rdquo;, or one millionth. The point is that the new one is many times faster than the old one.&lt;/p&gt;
&lt;p&gt;We can do a plot to help see this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/graphics/plot.default.html&#39;&gt;plot&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;bm&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; Loading required namespace: tidyr&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&#34;figs/unnamed-chunk-5-1.png&#34; width=&#34;700px&#34; style=&#34;display: block; margin: auto;&#34; /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;So we can see that the new one really is &lt;em&gt;a lot&lt;/em&gt; faster.&lt;/p&gt;
&lt;p&gt;But if I just want to be able to say something like:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It is XX times faster&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;then we can use the (somewhat unknown?) &lt;code&gt;relative = TRUE&lt;/code&gt; option of &lt;a href=&#34;https://bench.r-lib.org/reference/summary.bench_mark.html&#34;&gt;bench&amp;rsquo;s S3 method for &lt;code&gt;summary&lt;/code&gt; method&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/summary.html&#39;&gt;summary&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;bm&lt;/span&gt;, relative &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;kc&#39;&gt;TRUE&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;# A tibble: 2 × 6&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   expression   min median `itr/sec` mem_alloc `gc/sec`&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;bch:expr&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dbl&amp;gt;&lt;/span&gt;  &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dbl&amp;gt;&lt;/span&gt;     &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dbl&amp;gt;&lt;/span&gt;     &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dbl&amp;gt;&lt;/span&gt;    &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dbl&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;1&lt;/span&gt; old         68.7   62.2       1        4.34     9.62&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;2&lt;/span&gt; new          1      1        57.0      1        1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;And this is great, from this we can see it is about 60 times faster. And that the old approach uses 15 times more memory.&lt;/p&gt;
&lt;h2 id=&#34;the-story-behind-this-speedup-in-naniar&#34;&gt;The story behind this speedup in naniar.&lt;/h2&gt;
&lt;p&gt;Now, I didn&amp;rsquo;t just come up with a speedup for missing values on the fly. The story here is that there was going to be some (very generous) improvements to the naniar package from &lt;a href=&#34;https://github.com/romainfrancois&#34;&gt;Romain François&lt;/a&gt; &lt;a href=&#34;https://github.com/njtierney/naniar/issues/113&#34;&gt;in the form of C++ code&lt;/a&gt;. However, &lt;a href=&#34;https://www.jimhester.com/&#34;&gt;Jim Hester&lt;/a&gt; suggested some changes, I think twitter (which I can&amp;rsquo;t find anymore), and he then kindly submitted a &lt;a href=&#34;https://github.com/njtierney/naniar/pull/112/&#34;&gt;pull request showing that rowSums in R ends up being plenty fast&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is a similar story to Josiah&amp;rsquo;s, where he used Rust code to get it faster, but then there was a faster way just staying within R.&lt;/p&gt;
&lt;p&gt;Sometimes, you don&amp;rsquo;t need extra C or Fortran or Rust. R is enough!&lt;/p&gt;
&lt;p&gt;And if you want to be able to compare the speeds of things, don&amp;rsquo;t forget the &lt;code&gt;relative = TRUE&lt;/code&gt; argument in &lt;code&gt;summary&lt;/code&gt; when using &lt;a href=&#34;http://bench.r-lib.org/reference/mark.html&#34;&gt;&lt;code&gt;bench::mark&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&#34;other-packages-for-microbenchmarking&#34;&gt;Other packages for microbenchmarking&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;bench&lt;/code&gt; isn&amp;rsquo;t the only way to measure things! Other ones I&amp;rsquo;ve enjoyed using in the past are &lt;a href=&#34;https://cran.r-project.org/web/packages/microbenchmark/index.html&#34;&gt;microbenchmark&lt;/a&gt; and &lt;a href=&#34;https://cran.r-project.org/web/packages/tictoc/index.html&#34;&gt;tictoc&lt;/a&gt;. I&amp;rsquo;ve particularly enjoyed &lt;code&gt;tictoc&lt;/code&gt; because you get to do this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;kr&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/library.html&#39;&gt;library&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;&lt;a href=&#39;https://github.com/jabiru/tictoc&#39;&gt;tictoc&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/pkg/tictoc/man/tic.html&#39;&gt;tic&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;new_n_miss&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;airquality&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;# A tibble: 153 × 7&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;    Ozone Solar.R  Wind  Temp Month   Day n_miss&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;    &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;int&amp;gt;&lt;/span&gt;   &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;int&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dbl&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;int&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;int&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;int&amp;gt;&lt;/span&gt;  &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dbl&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 1&lt;/span&gt;    41     190   7.4    67     5     1      0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 2&lt;/span&gt;    36     118   8      72     5     2      0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 3&lt;/span&gt;    12     149  12.6    74     5     3      0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 4&lt;/span&gt;    18     313  11.5    62     5     4      0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 5&lt;/span&gt;    &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;      &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;  14.3    56     5     5      2&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 6&lt;/span&gt;    28      &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;  14.9    66     5     6      1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 7&lt;/span&gt;    23     299   8.6    65     5     7      0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 8&lt;/span&gt;    19      99  13.8    59     5     8      0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 9&lt;/span&gt;     8      19  20.1    61     5     9      0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;10&lt;/span&gt;    &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;     194   8.6    69     5    10      1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;# ℹ 143 more rows&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/pkg/tictoc/man/tic.html&#39;&gt;toc&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; 0.01 sec elapsed&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Which feels a bit nicer than using &lt;a href=&#34;https://rdrr.io/r/base/system.time.html&#34;&gt;&lt;code&gt;system.time()&lt;/code&gt;&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/system.time.html&#39;&gt;system.time&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;&amp;#123;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nf&#39;&gt;new_n_miss&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;airquality&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;o&#39;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;    user  system elapsed &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   0.001   0.000   0.002&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Also, notice that those two times are different? This is why we use benchmarking, to run those checks many times!&lt;/p&gt;
&lt;h1 id=&#34;end&#34;&gt;End&lt;/h1&gt;
&lt;p&gt;And that&amp;rsquo;s it, that&amp;rsquo;s the blog post. The &lt;code&gt;relative = TRUE&lt;/code&gt; option in &lt;code&gt;mark&lt;/code&gt; is super neat, and I don&amp;rsquo;t think many people know about it. Thanks again to Jim Hester for originally creating the &lt;code&gt;bench&lt;/code&gt; package.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>{naniar} version 1.1.0 &#34;Prince Caspian&#34;</title>
      <link>https://www.njtierney.com/post/2024/03/04/naniar-version-1-1-0-prince-caspian/</link>
      <pubDate>Mon, 04 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://www.njtierney.com/post/2024/03/04/naniar-version-1-1-0-prince-caspian/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m happy to announce that naniar version 1.1.0 &amp;ldquo;Prince Caspian&amp;rdquo; is released. It&amp;rsquo;s been about a year since the last releaase, so I&amp;rsquo;m happy to include some new features. Let&amp;rsquo;s explore some of the new changes in this release&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/options.html&#39;&gt;options&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;tidyverse.quiet &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;kc&#39;&gt;TRUE&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;kr&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/library.html&#39;&gt;library&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;&lt;a href=&#39;https://tidyverse.tidyverse.org&#39;&gt;tidyverse&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;kr&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/library.html&#39;&gt;library&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;&lt;a href=&#39;https://github.com/njtierney/naniar&#39;&gt;naniar&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h1 id=&#34;imputation-functions&#34;&gt;Imputation functions&lt;/h1&gt;
&lt;p&gt;I&amp;rsquo;ve always been a hesitant to include imputation helper functions like &lt;a href=&#34;http://naniar.njtierney.com/reference/impute_mean.html&#34;&gt;&lt;code&gt;impute_mean()&lt;/code&gt;&lt;/a&gt;, and friends in {naniar}, as they aren&amp;rsquo;t a great tool to use for imputation. I also really believe the &lt;a href=&#34;https://cran.r-project.org/web/packages/simputation/&#34;&gt;{simputation}&lt;/a&gt; R package does a great job at doing much imputation. However, sometimes you do actually want to demonstrate how bad imputing the mean is. Or sometimes you do need to impute the mean. And I&amp;rsquo;d rather make it easier for people to do this.&lt;/p&gt;
&lt;p&gt;This release included some new functions: &lt;a href=&#34;http://naniar.njtierney.com/reference/impute_fixed.html&#34;&gt;&lt;code&gt;impute_fixed()&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;http://naniar.njtierney.com/reference/impute_zero.html&#34;&gt;&lt;code&gt;impute_zero()&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;http://naniar.njtierney.com/reference/impute_factor.html&#34;&gt;&lt;code&gt;impute_factor()&lt;/code&gt;&lt;/a&gt;, and &lt;a href=&#34;http://naniar.njtierney.com/reference/impute_mode.html&#34;&gt;&lt;code&gt;impute_mode()&lt;/code&gt;&lt;/a&gt;. Notably, these do not implement &amp;ldquo;scoped variants&amp;rdquo; which were previously implemented - for example, &lt;code&gt;impute_fixed_if()&lt;/code&gt; etc. This is in favour of using the new &lt;a href=&#34;https://dplyr.tidyverse.org/reference/across.html&#34;&gt;&lt;code&gt;across()&lt;/code&gt;&lt;/a&gt; workflow within {dplyr}, which is a bit easier to maintain. This resolves issues &lt;a href=&#34;https://github.com//njtierney/naniar/issues/261&#34;&gt;#261&lt;/a&gt; and &lt;a href=&#34;https://github.com//njtierney/naniar/issues/213&#34;&gt;#213&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To demonstrate these imputation functions, let&amp;rsquo;s create a vector of missing values:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;kr&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/library.html&#39;&gt;library&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;&lt;a href=&#39;https://github.com/njtierney/naniar&#39;&gt;naniar&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;vec_num&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/stats/Normal.html&#39;&gt;rnorm&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;m&#39;&gt;10&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;vec_int&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/stats/Poisson.html&#39;&gt;rpois&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;m&#39;&gt;10&lt;/span&gt;, &lt;span class=&#39;m&#39;&gt;5&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;vec_fct&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/factor.html&#39;&gt;factor&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;LETTERS&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;[&lt;/span&gt;&lt;span class=&#39;m&#39;&gt;1&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;:&lt;/span&gt;&lt;span class=&#39;m&#39;&gt;10&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;]&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;vec_num&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/set-prop-n-miss.html&#39;&gt;set_prop_miss&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;vec_num&lt;/span&gt;, &lt;span class=&#39;m&#39;&gt;0.4&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;vec_int&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/set-prop-n-miss.html&#39;&gt;set_prop_miss&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;vec_int&lt;/span&gt;, &lt;span class=&#39;m&#39;&gt;0.4&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;vec_fct&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/set-prop-n-miss.html&#39;&gt;set_prop_miss&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;vec_fct&lt;/span&gt;, &lt;span class=&#39;m&#39;&gt;0.4&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;vec_num&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  [1]         NA  0.9232763         NA  0.5265162         NA         NA&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  [7]  1.4260531  1.3793303 -0.7855565 -0.5928170&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;vec_int&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  [1] NA  5  6  5  5 NA NA  6 NA  6&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;vec_fct&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  [1] &amp;lt;NA&amp;gt; B    &amp;lt;NA&amp;gt; D    &amp;lt;NA&amp;gt; F    G    &amp;lt;NA&amp;gt; I    J   &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; Levels: A B C D E F G H I J&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;We can use &lt;a href=&#34;http://naniar.njtierney.com/reference/impute_fixed.html&#34;&gt;&lt;code&gt;impute_fixed()&lt;/code&gt;&lt;/a&gt; to impute fixed values into the numeric of these:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/impute_fixed.html&#39;&gt;impute_fixed&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;vec_num&lt;/span&gt;, &lt;span class=&#39;o&#39;&gt;-&lt;/span&gt;&lt;span class=&#39;m&#39;&gt;999&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  [1] -999.0000000    0.9232763 -999.0000000    0.5265162 -999.0000000&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  [6] -999.0000000    1.4260531    1.3793303   -0.7855565   -0.5928170&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/impute_fixed.html&#39;&gt;impute_fixed&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;vec_int&lt;/span&gt;, &lt;span class=&#39;o&#39;&gt;-&lt;/span&gt;&lt;span class=&#39;m&#39;&gt;999&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  [1] -999    5    6    5    5 -999 -999    6 -999    6&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;And &lt;code&gt;impute_zero&lt;/code&gt; is just a special case of &lt;code&gt;impute_fixed&lt;/code&gt;, where the fixed value is 0:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/impute_zero.html&#39;&gt;impute_zero&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;vec_num&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  [1]  0.0000000  0.9232763  0.0000000  0.5265162  0.0000000  0.0000000&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  [7]  1.4260531  1.3793303 -0.7855565 -0.5928170&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/impute_zero.html&#39;&gt;impute_zero&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;vec_int&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  [1] 0 5 6 5 5 0 0 6 0 6&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Similar to &lt;a href=&#34;http://naniar.njtierney.com/reference/impute_mean.html&#34;&gt;&lt;code&gt;impute_mean()&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;http://naniar.njtierney.com/reference/impute_mode.html&#34;&gt;&lt;code&gt;impute_mode()&lt;/code&gt;&lt;/a&gt; imputes the mode:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/impute_mode.html&#39;&gt;impute_mode&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;vec_num&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  [1]  1.0704569  0.9232763  1.0704569  0.5265162  1.0704569  1.0704569&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  [7]  1.4260531  1.3793303 -0.7855565 -0.5928170&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/impute_mode.html&#39;&gt;impute_mode&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;vec_int&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  [1] 6 5 6 5 5 6 6 6 6 6&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;You can&amp;rsquo;t however use &lt;a href=&#34;http://naniar.njtierney.com/reference/impute_fixed.html&#34;&gt;&lt;code&gt;impute_fixed()&lt;/code&gt;&lt;/a&gt; or &lt;a href=&#34;http://naniar.njtierney.com/reference/impute_zero.html&#34;&gt;&lt;code&gt;impute_zero()&lt;/code&gt;&lt;/a&gt; on factors, and this doesn&amp;rsquo;t work for factors, even if it&amp;rsquo;s a new character.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/impute_fixed.html&#39;&gt;impute_fixed&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;vec_fct&lt;/span&gt;, &lt;span class=&#39;o&#39;&gt;-&lt;/span&gt;&lt;span class=&#39;m&#39;&gt;999&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; Warning in `[&amp;lt;-.factor`(`*tmp*`, is.na(x), value = -999): invalid factor level, NA generated&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  [1] &amp;lt;NA&amp;gt; B    &amp;lt;NA&amp;gt; D    &amp;lt;NA&amp;gt; F    G    &amp;lt;NA&amp;gt; I    J   &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; Levels: A B C D E F G H I J&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/impute_zero.html&#39;&gt;impute_zero&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;vec_fct&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; Warning in `[&amp;lt;-.factor`(`*tmp*`, is.na(x), value = 0): invalid factor level, NA generated&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  [1] &amp;lt;NA&amp;gt; B    &amp;lt;NA&amp;gt; D    &amp;lt;NA&amp;gt; F    G    &amp;lt;NA&amp;gt; I    J   &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; Levels: A B C D E F G H I J&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/impute_fixed.html&#39;&gt;impute_fixed&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;vec_fct&lt;/span&gt;, &lt;span class=&#39;s&#39;&gt;&#34;ZZ&#34;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; Warning in `[&amp;lt;-.factor`(`*tmp*`, is.na(x), value = &#34;ZZ&#34;): invalid factor level, NA generated&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  [1] &amp;lt;NA&amp;gt; B    &amp;lt;NA&amp;gt; D    &amp;lt;NA&amp;gt; F    G    &amp;lt;NA&amp;gt; I    J   &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; Levels: A B C D E F G H I J&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;However, you can use &lt;a href=&#34;http://naniar.njtierney.com/reference/impute_mode.html&#34;&gt;&lt;code&gt;impute_mode()&lt;/code&gt;&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/impute_mode.html&#39;&gt;impute_mode&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;vec_fct&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  [1] I B I D I F G I I J&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; Levels: A B C D E F G H I J&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;For factors, you can impute a specific value:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/impute_factor.html&#39;&gt;impute_factor&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;vec_fct&lt;/span&gt;, value &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;s&#39;&gt;&#34;ZZ&#34;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;  [1] ZZ B  ZZ D  ZZ F  G  ZZ I  J &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; Levels: A B C D E F G H I J ZZ&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Think of it like &lt;a href=&#34;http://naniar.njtierney.com/reference/impute_fixed.html&#34;&gt;&lt;code&gt;impute_fixed()&lt;/code&gt;&lt;/a&gt;, but a special case for factors.&lt;/p&gt;
&lt;p&gt;Now let&amp;rsquo;s demonstrate how to do this in a data frame. First we create the data&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;kr&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/library.html&#39;&gt;library&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;&lt;a href=&#39;https://dplyr.tidyverse.org&#39;&gt;dplyr&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;dat&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://tibble.tidyverse.org/reference/tibble.html&#39;&gt;tibble&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  num &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nv&#39;&gt;vec_num&lt;/span&gt;,&lt;/span&gt;
&lt;span&gt;  int &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nv&#39;&gt;vec_int&lt;/span&gt;,&lt;/span&gt;
&lt;span&gt;  fct &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nv&#39;&gt;vec_fct&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;dat&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;# A tibble: 10 × 3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;       num   int fct  &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;     &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dbl&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;int&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;fct&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 1&lt;/span&gt; &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;        &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt; &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;   &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 2&lt;/span&gt;  0.923     5 B    &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 3&lt;/span&gt; &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;         6 &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;   &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 4&lt;/span&gt;  0.527     5 D    &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 5&lt;/span&gt; &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;         5 &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;   &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 6&lt;/span&gt; &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;        &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt; F    &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 7&lt;/span&gt;  1.43     &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt; G    &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 8&lt;/span&gt;  1.38      6 &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;   &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 9&lt;/span&gt; -&lt;span style=&#39;color: #BB0000;&#39;&gt;0.786&lt;/span&gt;    &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt; I    &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;10&lt;/span&gt; -&lt;span style=&#39;color: #BB0000;&#39;&gt;0.593&lt;/span&gt;     6 J&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;You can use it inside mutate like so:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;dat&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&lt;a href=&#39;https://magrittr.tidyverse.org/reference/pipe.html&#39;&gt;%&amp;gt;%&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://dplyr.tidyverse.org/reference/mutate.html&#39;&gt;mutate&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;    num &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/impute_fixed.html&#39;&gt;impute_fixed&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;num&lt;/span&gt;, &lt;span class=&#39;o&#39;&gt;-&lt;/span&gt;&lt;span class=&#39;m&#39;&gt;9999&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;,&lt;/span&gt;
&lt;span&gt;    int &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/impute_zero.html&#39;&gt;impute_zero&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;int&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;,&lt;/span&gt;
&lt;span&gt;    fct &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/impute_factor.html&#39;&gt;impute_factor&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;fct&lt;/span&gt;, &lt;span class=&#39;s&#39;&gt;&#34;out&#34;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;# A tibble: 10 × 3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;          num   int fct  &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;        &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dbl&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dbl&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;fct&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 1&lt;/span&gt; -&lt;span style=&#39;color: #BB0000; text-decoration: underline;&#39;&gt;9&lt;/span&gt;&lt;span style=&#39;color: #BB0000;&#39;&gt;999&lt;/span&gt;         0 out  &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 2&lt;/span&gt;     0.923     5 B    &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 3&lt;/span&gt; -&lt;span style=&#39;color: #BB0000; text-decoration: underline;&#39;&gt;9&lt;/span&gt;&lt;span style=&#39;color: #BB0000;&#39;&gt;999&lt;/span&gt;         6 out  &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 4&lt;/span&gt;     0.527     5 D    &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 5&lt;/span&gt; -&lt;span style=&#39;color: #BB0000; text-decoration: underline;&#39;&gt;9&lt;/span&gt;&lt;span style=&#39;color: #BB0000;&#39;&gt;999&lt;/span&gt;         5 out  &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 6&lt;/span&gt; -&lt;span style=&#39;color: #BB0000; text-decoration: underline;&#39;&gt;9&lt;/span&gt;&lt;span style=&#39;color: #BB0000;&#39;&gt;999&lt;/span&gt;         0 F    &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 7&lt;/span&gt;     1.43      0 G    &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 8&lt;/span&gt;     1.38      6 out  &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 9&lt;/span&gt;    -&lt;span style=&#39;color: #BB0000;&#39;&gt;0.786&lt;/span&gt;     0 I    &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;10&lt;/span&gt;    -&lt;span style=&#39;color: #BB0000;&#39;&gt;0.593&lt;/span&gt;     6 J&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Or if you want to impute across all applicable variables with a single function, you could use &lt;code&gt;where&lt;/code&gt; like so, to focus on numeric data:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;dat&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&lt;a href=&#39;https://magrittr.tidyverse.org/reference/pipe.html&#39;&gt;%&amp;gt;%&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://dplyr.tidyverse.org/reference/mutate.html&#39;&gt;mutate&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;    &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://dplyr.tidyverse.org/reference/across.html&#39;&gt;across&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;      .cols &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://tidyselect.r-lib.org/reference/where.html&#39;&gt;where&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;is.numeric&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;,&lt;/span&gt;
&lt;span&gt;      .fn &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nv&#39;&gt;impute_zero&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;    &lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;# A tibble: 10 × 3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;       num   int fct  &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;     &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dbl&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dbl&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;fct&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 1&lt;/span&gt;  0         0 &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;   &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 2&lt;/span&gt;  0.923     5 B    &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 3&lt;/span&gt;  0         6 &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;   &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 4&lt;/span&gt;  0.527     5 D    &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 5&lt;/span&gt;  0         5 &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;   &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 6&lt;/span&gt;  0         0 F    &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 7&lt;/span&gt;  1.43      0 G    &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 8&lt;/span&gt;  1.38      6 &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;   &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 9&lt;/span&gt; -&lt;span style=&#39;color: #BB0000;&#39;&gt;0.786&lt;/span&gt;     0 I    &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;10&lt;/span&gt; -&lt;span style=&#39;color: #BB0000;&#39;&gt;0.593&lt;/span&gt;     6 J&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;dat&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&lt;a href=&#39;https://magrittr.tidyverse.org/reference/pipe.html&#39;&gt;%&amp;gt;%&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://dplyr.tidyverse.org/reference/mutate.html&#39;&gt;mutate&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;    &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://dplyr.tidyverse.org/reference/across.html&#39;&gt;across&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;      .cols &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://tidyselect.r-lib.org/reference/where.html&#39;&gt;where&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;is.numeric&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;,&lt;/span&gt;
&lt;span&gt;      .fn &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; \&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;x&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/impute_fixed.html&#39;&gt;impute_fixed&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;x&lt;/span&gt;, &lt;span class=&#39;o&#39;&gt;-&lt;/span&gt;&lt;span class=&#39;m&#39;&gt;99&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;    &lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;# A tibble: 10 × 3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;        num   int fct  &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;      &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dbl&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dbl&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;fct&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 1&lt;/span&gt; -&lt;span style=&#39;color: #BB0000;&#39;&gt;99&lt;/span&gt;       -&lt;span style=&#39;color: #BB0000;&#39;&gt;99&lt;/span&gt; &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;   &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 2&lt;/span&gt;   0.923     5 B    &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 3&lt;/span&gt; -&lt;span style=&#39;color: #BB0000;&#39;&gt;99&lt;/span&gt;         6 &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;   &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 4&lt;/span&gt;   0.527     5 D    &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 5&lt;/span&gt; -&lt;span style=&#39;color: #BB0000;&#39;&gt;99&lt;/span&gt;         5 &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;   &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 6&lt;/span&gt; -&lt;span style=&#39;color: #BB0000;&#39;&gt;99&lt;/span&gt;       -&lt;span style=&#39;color: #BB0000;&#39;&gt;99&lt;/span&gt; F    &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 7&lt;/span&gt;   1.43    -&lt;span style=&#39;color: #BB0000;&#39;&gt;99&lt;/span&gt; G    &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 8&lt;/span&gt;   1.38      6 &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;   &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt; 9&lt;/span&gt;  -&lt;span style=&#39;color: #BB0000;&#39;&gt;0.786&lt;/span&gt;   -&lt;span style=&#39;color: #BB0000;&#39;&gt;99&lt;/span&gt; I    &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;10&lt;/span&gt;  -&lt;span style=&#39;color: #BB0000;&#39;&gt;0.593&lt;/span&gt;     6 J&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h1 id=&#34;improvements&#34;&gt;Improvements&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Add &lt;code&gt;digit&lt;/code&gt; argument to &lt;code&gt;miss_var_summary&lt;/code&gt; to help display percentage missing data correctly when there is a very small fraction of missingness - solving &lt;a href=&#34;https://github.com//njtierney/naniar/issues/284&#34;&gt;#284&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;N&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;m&#39;&gt;30000000&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;df&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://tibble.tidyverse.org/reference/tibble.html&#39;&gt;tibble&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;x &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/rep.html&#39;&gt;rep&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;kc&#39;&gt;NA_real_&lt;/span&gt;, &lt;span class=&#39;nv&#39;&gt;N&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&lt;a href=&#39;https://magrittr.tidyverse.org/reference/pipe.html&#39;&gt;%&amp;gt;%&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://tibble.tidyverse.org/reference/add_row.html&#39;&gt;add_row&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;x &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;m&#39;&gt;0&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;df&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&lt;a href=&#39;https://magrittr.tidyverse.org/reference/pipe.html&#39;&gt;%&amp;gt;%&lt;/a&gt;&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/miss_var_summary.html&#39;&gt;miss_var_summary&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;# A tibble: 1 × 3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   variable   n_miss pct_miss&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;chr&amp;gt;&lt;/span&gt;       &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;int&amp;gt;&lt;/span&gt;    &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;num&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;1&lt;/span&gt; x        30&lt;span style=&#39;text-decoration: underline;&#39;&gt;000&lt;/span&gt;000     100.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;df&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&lt;a href=&#39;https://magrittr.tidyverse.org/reference/pipe.html&#39;&gt;%&amp;gt;%&lt;/a&gt;&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/miss_var_summary.html&#39;&gt;miss_var_summary&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;digits &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;m&#39;&gt;6&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;# A tibble: 1 × 3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   variable   n_miss  pct_miss&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;chr&amp;gt;&lt;/span&gt;       &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;int&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;num:.6!&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;1&lt;/span&gt; x        30&lt;span style=&#39;text-decoration: underline;&#39;&gt;000&lt;/span&gt;000 99.999&lt;span style=&#39;text-decoration: underline;&#39;&gt;997&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://naniar.njtierney.com/reference/geom_miss_point.html&#34;&gt;&lt;code&gt;geom_miss_point()&lt;/code&gt;&lt;/a&gt; works with &lt;code&gt;shape&lt;/code&gt; argument &lt;a href=&#34;https://github.com//njtierney/naniar/issues/290&#34;&gt;#290&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://ggplot2.tidyverse.org/reference/ggplot.html&#39;&gt;ggplot&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nv&#39;&gt;airquality&lt;/span&gt;,&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://ggplot2.tidyverse.org/reference/aes.html&#39;&gt;aes&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;    x &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nv&#39;&gt;Ozone&lt;/span&gt;,&lt;/span&gt;
&lt;span&gt;    y &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nv&#39;&gt;Solar.R&lt;/span&gt;,&lt;/span&gt;
&lt;span&gt;    shape &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/factor.html&#39;&gt;factor&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;Month&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;+&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/geom_miss_point.html&#39;&gt;geom_miss_point&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;size &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;m&#39;&gt;4&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&#34;figs/unnamed-chunk-13-1.png&#34; width=&#34;700px&#34; style=&#34;display: block; margin: auto;&#34; /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Implemented &lt;code&gt;Date&lt;/code&gt;, &lt;code&gt;POSIXct&lt;/code&gt; and &lt;code&gt;POSIXlt&lt;/code&gt; methods for &lt;a href=&#34;http://naniar.njtierney.com/reference/impute_below.html&#34;&gt;&lt;code&gt;impute_below()&lt;/code&gt;&lt;/a&gt; - &lt;a href=&#34;https://github.com//njtierney/naniar/issues/158&#34;&gt;#158&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;dat_date&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://tibble.tidyverse.org/reference/tibble.html&#39;&gt;tibble&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  values &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;m&#39;&gt;1&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;:&lt;/span&gt;&lt;span class=&#39;m&#39;&gt;7&lt;/span&gt;,&lt;/span&gt;
&lt;span&gt;  number &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/c.html&#39;&gt;c&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;m&#39;&gt;111&lt;/span&gt;, &lt;span class=&#39;m&#39;&gt;112&lt;/span&gt;, &lt;span class=&#39;kc&#39;&gt;NA&lt;/span&gt;, &lt;span class=&#39;kc&#39;&gt;NA&lt;/span&gt;, &lt;span class=&#39;m&#39;&gt;108&lt;/span&gt;, &lt;span class=&#39;m&#39;&gt;150&lt;/span&gt;, &lt;span class=&#39;m&#39;&gt;160&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;,&lt;/span&gt;
&lt;span&gt;  posixct &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/as.POSIXlt.html&#39;&gt;as.POSIXct&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;number&lt;/span&gt;, origin &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;s&#39;&gt;&#34;1970-01-01&#34;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;,&lt;/span&gt;
&lt;span&gt;  posixlt &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/as.POSIXlt.html&#39;&gt;as.POSIXlt&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;number&lt;/span&gt;, origin &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;s&#39;&gt;&#34;1970-01-01&#34;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;,&lt;/span&gt;
&lt;span&gt;  date &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/as.Date.html&#39;&gt;as.Date&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;number&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;dat_date&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;# A tibble: 7 × 5&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   values number posixct             posixlt             date      &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;    &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;int&amp;gt;&lt;/span&gt;  &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dbl&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dttm&amp;gt;&lt;/span&gt;              &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dttm&amp;gt;&lt;/span&gt;              &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;date&amp;gt;&lt;/span&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;1&lt;/span&gt;      1    111 1970-01-01 &lt;span style=&#39;color: #555555;&#39;&gt;10:01:51&lt;/span&gt; 1970-01-01 &lt;span style=&#39;color: #555555;&#39;&gt;10:01:51&lt;/span&gt; 1970-04-22&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;2&lt;/span&gt;      2    112 1970-01-01 &lt;span style=&#39;color: #555555;&#39;&gt;10:01:52&lt;/span&gt; 1970-01-01 &lt;span style=&#39;color: #555555;&#39;&gt;10:01:52&lt;/span&gt; 1970-04-23&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;3&lt;/span&gt;      3     &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt; &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;                  &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;                  &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;4&lt;/span&gt;      4     &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt; &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;                  &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;                  &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;5&lt;/span&gt;      5    108 1970-01-01 &lt;span style=&#39;color: #555555;&#39;&gt;10:01:48&lt;/span&gt; 1970-01-01 &lt;span style=&#39;color: #555555;&#39;&gt;10:01:48&lt;/span&gt; 1970-04-19&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;6&lt;/span&gt;      6    150 1970-01-01 &lt;span style=&#39;color: #555555;&#39;&gt;10:02:30&lt;/span&gt; 1970-01-01 &lt;span style=&#39;color: #555555;&#39;&gt;10:02:30&lt;/span&gt; 1970-05-31&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;7&lt;/span&gt;      7    160 1970-01-01 &lt;span style=&#39;color: #555555;&#39;&gt;10:02:40&lt;/span&gt; 1970-01-01 &lt;span style=&#39;color: #555555;&#39;&gt;10:02:40&lt;/span&gt; 1970-06-10&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;date_date_imp&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;nv&#39;&gt;dat_date&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&lt;a href=&#39;https://magrittr.tidyverse.org/reference/pipe.html&#39;&gt;%&amp;gt;%&lt;/a&gt;&lt;/span&gt; &lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://dplyr.tidyverse.org/reference/mutate.html&#39;&gt;mutate&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;    number_imp &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/impute_below.html&#39;&gt;impute_below&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;number&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;,&lt;/span&gt;
&lt;span&gt;    .after &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nv&#39;&gt;number&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;o&#39;&gt;)&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&lt;a href=&#39;https://magrittr.tidyverse.org/reference/pipe.html&#39;&gt;%&amp;gt;%&lt;/a&gt;&lt;/span&gt; &lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://dplyr.tidyverse.org/reference/mutate.html&#39;&gt;mutate&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;    posixct_imp &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/impute_below.html&#39;&gt;impute_below&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;posixct&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;,&lt;/span&gt;
&lt;span&gt;    .after &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nv&#39;&gt;posixct&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;    &lt;span class=&#39;o&#39;&gt;)&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&lt;a href=&#39;https://magrittr.tidyverse.org/reference/pipe.html&#39;&gt;%&amp;gt;%&lt;/a&gt;&lt;/span&gt; &lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://dplyr.tidyverse.org/reference/mutate.html&#39;&gt;mutate&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;    posixlt_imp &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/impute_below.html&#39;&gt;impute_below&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;posixlt&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;,&lt;/span&gt;
&lt;span&gt;    .after &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nv&#39;&gt;posixlt&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;o&#39;&gt;)&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&lt;a href=&#39;https://magrittr.tidyverse.org/reference/pipe.html&#39;&gt;%&amp;gt;%&lt;/a&gt;&lt;/span&gt; &lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://dplyr.tidyverse.org/reference/mutate.html&#39;&gt;mutate&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;    date_imp &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/impute_below.html&#39;&gt;impute_below&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;date&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;,&lt;/span&gt;
&lt;span&gt;    .after &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nv&#39;&gt;date&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;date_date_imp&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;# A tibble: 7 × 9&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   values number number_imp posixct             posixct_imp        &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;    &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;int&amp;gt;&lt;/span&gt;  &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dbl&amp;gt;&lt;/span&gt;      &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dbl&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dttm&amp;gt;&lt;/span&gt;              &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dttm&amp;gt;&lt;/span&gt;             &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;1&lt;/span&gt;      1    111       111  1970-01-01 &lt;span style=&#39;color: #555555;&#39;&gt;10:01:51&lt;/span&gt; 1970-01-01 &lt;span style=&#39;color: #555555;&#39;&gt;10:01:51&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;2&lt;/span&gt;      2    112       112  1970-01-01 &lt;span style=&#39;color: #555555;&#39;&gt;10:01:52&lt;/span&gt; 1970-01-01 &lt;span style=&#39;color: #555555;&#39;&gt;10:01:52&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;3&lt;/span&gt;      3     &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;       103. &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;                  1970-01-01 &lt;span style=&#39;color: #555555;&#39;&gt;10:01:43&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;4&lt;/span&gt;      4     &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;       102. &lt;span style=&#39;color: #BB0000;&#39;&gt;NA&lt;/span&gt;                  1970-01-01 &lt;span style=&#39;color: #555555;&#39;&gt;10:01:41&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;5&lt;/span&gt;      5    108       108  1970-01-01 &lt;span style=&#39;color: #555555;&#39;&gt;10:01:48&lt;/span&gt; 1970-01-01 &lt;span style=&#39;color: #555555;&#39;&gt;10:01:48&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;6&lt;/span&gt;      6    150       150  1970-01-01 &lt;span style=&#39;color: #555555;&#39;&gt;10:02:30&lt;/span&gt; 1970-01-01 &lt;span style=&#39;color: #555555;&#39;&gt;10:02:30&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;7&lt;/span&gt;      7    160       160  1970-01-01 &lt;span style=&#39;color: #555555;&#39;&gt;10:02:40&lt;/span&gt; 1970-01-01 &lt;span style=&#39;color: #555555;&#39;&gt;10:02:40&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;# ℹ 4 more variables: posixlt &amp;lt;dttm&amp;gt;, posixlt_imp &amp;lt;dttm&amp;gt;, date &amp;lt;date&amp;gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;#   date_imp &amp;lt;date&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h1 id=&#34;bug-fixes&#34;&gt;Bug fixes&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Fix bug with &lt;a href=&#34;http://naniar.njtierney.com/reference/any-all-na-complete.html&#34;&gt;&lt;code&gt;all_complete()&lt;/code&gt;&lt;/a&gt;, which was implemented as &lt;code&gt;!anyNA(x)&lt;/code&gt; but should be &lt;code&gt;all(complete.cases(x))&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Correctly implement &lt;a href=&#34;http://naniar.njtierney.com/reference/any-all-na-complete.html&#34;&gt;&lt;code&gt;any_na()&lt;/code&gt;&lt;/a&gt; (and &lt;a href=&#34;http://naniar.njtierney.com/reference/any-all-na-complete.html&#34;&gt;&lt;code&gt;any_miss()&lt;/code&gt;&lt;/a&gt;) and &lt;a href=&#34;http://naniar.njtierney.com/reference/any-all-na-complete.html&#34;&gt;&lt;code&gt;any_complete()&lt;/code&gt;&lt;/a&gt;. Rework examples to demonstrate workflow for finding complete variables.&lt;/li&gt;
&lt;li&gt;Fix bug with &lt;a href=&#34;http://naniar.njtierney.com/reference/shadow_long.html&#34;&gt;&lt;code&gt;shadow_long()&lt;/code&gt;&lt;/a&gt; not working when gathering variables of mixed type. Fix involved specifying a value transform, which defaults to character. &lt;a href=&#34;https://github.com//njtierney/naniar/issues/314&#34;&gt;#314&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Provide &lt;a href=&#34;http://naniar.njtierney.com/reference/replace_na_with.html&#34;&gt;&lt;code&gt;replace_na_with()&lt;/code&gt;&lt;/a&gt;, a complement to &lt;a href=&#34;http://naniar.njtierney.com/reference/replace_with_na.html&#34;&gt;&lt;code&gt;replace_with_na()&lt;/code&gt;&lt;/a&gt; - &lt;a href=&#34;https://github.com//njtierney/naniar/issues/129&#34;&gt;#129&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#39;chroma&#39;&gt;&lt;code class=&#39;language-r&#39; data-lang=&#39;r&#39;&gt;&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;x&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/c.html&#39;&gt;c&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;m&#39;&gt;1&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;:&lt;/span&gt;&lt;span class=&#39;m&#39;&gt;5&lt;/span&gt;, &lt;span class=&#39;kc&#39;&gt;NA&lt;/span&gt;, &lt;span class=&#39;kc&#39;&gt;NA&lt;/span&gt;, &lt;span class=&#39;kc&#39;&gt;NA&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;x&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; [1]  1  2  3  4  5 NA NA NA&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/replace_na_with.html&#39;&gt;replace_na_with&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;x&lt;/span&gt;, &lt;span class=&#39;m&#39;&gt;0&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; [1] 1 2 3 4 5 0 0 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;dat&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://tibble.tidyverse.org/reference/tibble.html&#39;&gt;tibble&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  ones &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/c.html&#39;&gt;c&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;m&#39;&gt;1&lt;/span&gt;,&lt;span class=&#39;m&#39;&gt;1&lt;/span&gt;,&lt;span class=&#39;kc&#39;&gt;NA&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;,&lt;/span&gt;
&lt;span&gt;  twos &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/c.html&#39;&gt;c&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;kc&#39;&gt;NA&lt;/span&gt;,&lt;span class=&#39;kc&#39;&gt;NA&lt;/span&gt;, &lt;span class=&#39;m&#39;&gt;2&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;,&lt;/span&gt;
&lt;span&gt;  threes &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://rdrr.io/r/base/c.html&#39;&gt;c&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;kc&#39;&gt;NA&lt;/span&gt;, &lt;span class=&#39;kc&#39;&gt;NA&lt;/span&gt;, &lt;span class=&#39;kc&#39;&gt;NA&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;dat&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&lt;a href=&#39;https://magrittr.tidyverse.org/reference/pipe.html&#39;&gt;%&amp;gt;%&lt;/a&gt;&lt;/span&gt; &lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://dplyr.tidyverse.org/reference/mutate.html&#39;&gt;mutate&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;    ones &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/replace_na_with.html&#39;&gt;replace_na_with&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;ones&lt;/span&gt;, &lt;span class=&#39;m&#39;&gt;0&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;,&lt;/span&gt;
&lt;span&gt;    twos &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/replace_na_with.html&#39;&gt;replace_na_with&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;twos&lt;/span&gt;, &lt;span class=&#39;o&#39;&gt;-&lt;/span&gt;&lt;span class=&#39;m&#39;&gt;2&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;,&lt;/span&gt;
&lt;span&gt;    threes &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/replace_na_with.html&#39;&gt;replace_na_with&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;threes&lt;/span&gt;, &lt;span class=&#39;o&#39;&gt;-&lt;/span&gt;&lt;span class=&#39;m&#39;&gt;3&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;# A tibble: 3 × 3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;    ones  twos threes&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dbl&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dbl&amp;gt;&lt;/span&gt;  &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dbl&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;1&lt;/span&gt;     1    -&lt;span style=&#39;color: #BB0000;&#39;&gt;2&lt;/span&gt;     -&lt;span style=&#39;color: #BB0000;&#39;&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;2&lt;/span&gt;     1    -&lt;span style=&#39;color: #BB0000;&#39;&gt;2&lt;/span&gt;     -&lt;span style=&#39;color: #BB0000;&#39;&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;3&lt;/span&gt;     0     2     -&lt;span style=&#39;color: #BB0000;&#39;&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;nv&#39;&gt;dat&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&lt;a href=&#39;https://magrittr.tidyverse.org/reference/pipe.html&#39;&gt;%&amp;gt;%&lt;/a&gt;&lt;/span&gt; &lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://dplyr.tidyverse.org/reference/mutate.html&#39;&gt;mutate&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;    &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://dplyr.tidyverse.org/reference/across.html&#39;&gt;across&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;      &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;https://tidyselect.r-lib.org/reference/everything.html&#39;&gt;everything&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;,&lt;/span&gt;
&lt;span&gt;      \&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;x&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt; &lt;span class=&#39;nf&#39;&gt;&lt;a href=&#39;http://naniar.njtierney.com/reference/replace_na_with.html&#39;&gt;replace_na_with&lt;/a&gt;&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;x&lt;/span&gt;, &lt;span class=&#39;o&#39;&gt;-&lt;/span&gt;&lt;span class=&#39;m&#39;&gt;99&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;    &lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;  &lt;span class=&#39;o&#39;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;# A tibble: 3 × 3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;    ones  twos threes&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt;   &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dbl&amp;gt;&lt;/span&gt; &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dbl&amp;gt;&lt;/span&gt;  &lt;span style=&#39;color: #555555; font-style: italic;&#39;&gt;&amp;lt;dbl&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;1&lt;/span&gt;     1   -&lt;span style=&#39;color: #BB0000;&#39;&gt;99&lt;/span&gt;    -&lt;span style=&#39;color: #BB0000;&#39;&gt;99&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;2&lt;/span&gt;     1   -&lt;span style=&#39;color: #BB0000;&#39;&gt;99&lt;/span&gt;    -&lt;span style=&#39;color: #BB0000;&#39;&gt;99&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span class=&#39;c&#39;&gt;#&amp;gt; &lt;span style=&#39;color: #555555;&#39;&gt;3&lt;/span&gt;   -&lt;span style=&#39;color: #BB0000;&#39;&gt;99&lt;/span&gt;     2    -&lt;span style=&#39;color: #BB0000;&#39;&gt;99&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Fix bug with &lt;a href=&#34;http://naniar.njtierney.com/reference/gg_miss_fct.html&#34;&gt;&lt;code&gt;gg_miss_fct()&lt;/code&gt;&lt;/a&gt; where it used a deprecated function from forcats - &lt;a href=&#34;https://github.com//njtierney/naniar/issues/342&#34;&gt;#342&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;internal-changes&#34;&gt;Internal changes&lt;/h1&gt;
&lt;p&gt;{naniar} now uses &lt;a href=&#34;https://cli.r-lib.org/reference/cli_abort.html&#34;&gt;&lt;code&gt;cli::cli_abort()&lt;/code&gt;&lt;/a&gt; and &lt;a href=&#34;https://cli.r-lib.org/reference/cli_abort.html&#34;&gt;&lt;code&gt;cli::cli_warn()&lt;/code&gt;&lt;/a&gt; instead of &lt;a href=&#34;https://rdrr.io/r/base/stop.html&#34;&gt;&lt;code&gt;stop()&lt;/code&gt;&lt;/a&gt; and &lt;a href=&#34;https://rdrr.io/r/base/warning.html&#34;&gt;&lt;code&gt;warning()&lt;/code&gt;&lt;/a&gt; (&lt;a href=&#34;https://github.com//njtierney/naniar/issues/326&#34;&gt;#326&lt;/a&gt;). Internally in tests we changed to use &lt;code&gt;expect_snapshot()&lt;/code&gt; instead of &lt;code&gt;expect_error()&lt;/code&gt;.&lt;/p&gt;
&lt;h1 id=&#34;deprecations&#34;&gt;Deprecations&lt;/h1&gt;
&lt;p&gt;The following functions have been soft deprecated, and will eventually be made defunct in future versions of naniar. &lt;a href=&#34;http://naniar.njtierney.com/reference/shadow_shift.html&#34;&gt;&lt;code&gt;shadow_shift()&lt;/code&gt;&lt;/a&gt; - &lt;a href=&#34;https://github.com//njtierney/naniar/issues/193&#34;&gt;#193&lt;/a&gt; in favour of &lt;a href=&#34;http://naniar.njtierney.com/reference/impute_below.html&#34;&gt;&lt;code&gt;impute_below()&lt;/code&gt;&lt;/a&gt;, and &lt;a href=&#34;http://naniar.njtierney.com/reference/miss_case_cumsum.html&#34;&gt;&lt;code&gt;miss_case_cumsum()&lt;/code&gt;&lt;/a&gt; and &lt;a href=&#34;http://naniar.njtierney.com/reference/miss_var_cumsum.html&#34;&gt;&lt;code&gt;miss_var_cumsum()&lt;/code&gt;&lt;/a&gt; - &lt;a href=&#34;https://github.com//njtierney/naniar/issues/257&#34;&gt;#257&lt;/a&gt; - in favour of &lt;code&gt;miss_case_summary(data, cumsum = TRUE)&lt;/code&gt; and &lt;code&gt;miss_var_summary(data, cumsum = TRUE)&lt;/code&gt;.&lt;/p&gt;
&lt;h1 id=&#34;thanks&#34;&gt;Thanks!&lt;/h1&gt;
&lt;p&gt;Thanks to everyone for using {naniar}, I&amp;rsquo;m happy that I&amp;rsquo;ve got another release out the door and am looking forward to more changes in the future. Especially thanks to everyone who contributed to issues and or pull request for this release, including: &lt;a href=&#34;https://github.com/szimmer&#34;&gt;@szimmer&lt;/a&gt;, &lt;a href=&#34;https://github.com/HughParsonage&#34;&gt;@HughParsonage&lt;/a&gt;, , &lt;a href=&#34;https://github.com/siavash-babaei&#34;&gt;@siavash-babaei&lt;/a&gt;, &lt;a href=&#34;https://github.com/maksymiuks&#34;&gt;@maksymiuks&lt;/a&gt;, &lt;a href=&#34;https://github.com/jonocarroll&#34;&gt;@jonocarroll&lt;/a&gt;, &lt;a href=&#34;https://github.com/jzadra&#34;&gt;@jzadra&lt;/a&gt;, &lt;a href=&#34;https://github.com/krlmlr&#34;&gt;@krlmlr&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
  </channel>
</rss>
