/
2020-knitrdata.Rmd
6766 lines (6541 loc) · 439 KB
/
2020-knitrdata.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
---
title: "knitrdata: A Tool for Creating Standalone Rmarkdown Source Documents"
date: "2023-01-18"
author:
- name: David M. Kaplan
url: https://www.davidmkaplan.fr
email: david.kaplan@ird.fr
orcid: 0000-0001-6087-359X
affiliation: MARBEC
address:
- Univ Montepllier, CNRS, Ifremer, IRD
- Sète, France
affiliation2: Institute de Recherche pour le Developpement (IRD)
address2:
- UMR MARBEC
- av. Jean Monnet
- CS 30171
- 34203 Sète cedex, France
abstract: >
Though Rmarkdown is a powerful tool for integrating text with code for analyses in a single source document exportable to a variety of output formats, until now there has been no simple way to integrate the data behind analyses into Rmarkdown source documents. The `knitrdata` package makes it possible for arbitrary text and binary data to be integrated directly into Rmarkdown source documents via implementation of a new `data` chunk type. The package includes command-line and graphical tools that facilitate creating and inserting `data` chunks into Rmarkdown documents, and the treatment of `data` chunks is highly configurable via chunk options. These tools allow one to easily create fully standalone Rmarkdown source documents integrating data, ancillary formatting files, analysis code and text in a single file. Used properly, the package can facilitate open distribution of source documents that demonstrate computational reproducibility of scientific results.
preamble: |
% Any extra LaTeX you need in the preamble
\usepackage{longtable}
\usepackage{calc} % for calculating minipage widths
\usepackage{etoolbox}
# per R journal requirement, the bib filename should be the same as the output
# tex file. Don't forget to rename the bib file and change this example value.
type: package
output:
rjtools::rjournal_web_article:
self_contained: yes
toc: no
bibliography: "2020-knitrdata.bib"
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
options(tinytex.verbose = TRUE)
library(tidyverse)
# Install knitrdata if not already installed
if (!requireNamespace("knitrdata")) {
if (!requireNamespace("remotes"))
install.packages("remotes")
remotes::install_github("dmkaplan2000/knitrdata",ref="v0.6.1")
}
library(knitrdata)
```
```{r r-packages-bib,eval=FALSE}
# Add bib references for R packages,
knitr::write_bib(c(.packages(),"rticles","starticles","rmarkdown","knitr",
"remotes","bookdown",
"kableExtra","knitrdata","gpg","xfun","citr"),
"2020-knitrdata.r-packages.bib")
```
```{r zotero-bib,eval=FALSE}
# Download refs from zotero
download.file("http://127.0.0.1:23119/better-bibtex/collection?/1/papers/2020-knitrdata.bibtex","2020-knitrdata.zotero.bib")
```
```{r combined-bib,eval=FALSE}
x = readLines("2020-knitrdata.zotero.bib")
y = readLines("2020-knitrdata.r-packages.bib")
writeLines(c(x,y),"2020-knitrdata.bib")
```
# Introduction
The basic principles of open science are that the data, research methodologies and analysis tools (e.g., the specific computational tools) used for scientific research should be made publicly available so that others can confirm and validate scientific analyses. Open science is particularly important for studies and disciplines for which true experimental replication is often difficult or impossible due to spatial, temporal or individual specificity [e.g., we cannot replicate Earth; @powersOpenScienceReproducibility2019]. In these cases, computational reproducibility, i.e., the ability to reproduce analytic results given the original data and analysis code, can still be achieved and can provide significant credibility to results [@powersOpenScienceReproducibility2019]. Though scientists, governments and journals often place great emphasis on access to raw data [@casseyReproducibilityRepeatabilityEcology2006; @lowndesOurpathbetter2017], it is important to remember that computational reproducibility can only be assured if data, methods, computational tools and the relationships between these are *all* openly accessible. Even when data are made publicly available, there are often significant gaps between the Methods section of a publication and the raw data that complicate reproducibility without access to the detailed code used to generate results. It is, therefore, essential for computational reproducibility that the code used to generate results be distributed along with the data and the publication itself. Though there are a number of potential ways to distribute all these elements together, probably the most common current approach is to place the data in a publicly accessible data store (e.g., [Dryad](https://datadryad.org)) and to associate the code with the publication via the supplementary material and/or by including it in the data store. Though this is a perfectly viable approach that can greatly enhance transparency of research, it physically separates data from analysis code and interpretation of results, potentially leading to confusion and/or loss of information regarding how these different element interrelate. At times, it would be more convenient, transparent and/or effective to join all the elements into a single document. The R package presented here, \CRANpkg{knitrdata} [@R-knitrdata], provides tools for doing just that - integrating data directly into Rmarkdown source documents so that data, code for analyses and text interpreting results are all available in a single file.
Rmarkdown [@R-rmarkdown] has become an increasingly popular tool for generating rich scientific documents while maintaining a source document that makes explicit the relationship between text and specific analyses used to produce results [@knitr2014; @lowndesOurpathbetter2017]. In a nutshell, Rmarkdown source documents are text documents comprised of two major elements: structured text that make up the headings and paragraphs of the document, and blocks of code (typically, but not exclusively, R code) for doing analyses and generating figures and tables. Rmarkdown source documents can be processed into a variety of final output formats, including PDF documents formatted for scientific publication. During this processing, the blocks of code in the source document are executed and used to augment the final output document with figures, tables and analytic results. In addition to providing a single source document that includes both written text and code for carrying out analyses, Rmarkdown has other benefits for open science, such as requiring the user to provide fully functioning code that runs from start to end without errors and facilitating reuse and updating of documents when new data arrives.
Until now, however, it has been difficult to integrate the raw data itself that are the bases for analyses directly into Rmarkdown source documents. Typically, data are placed in external files that are accessed via R code contained in the Rmarkdown source document that is executed during the knitting. As previously mentioned, this has the disadvantage of physically separating data from analysis code and text contained in the Rmarkdown source document, potentially leading to confusion and/or information loss. Furthermore, on a practical level, it often can be extremely convenient to merge all pertinent information into a single source document (e.g., to facilitate collaboration on an Rmarkdown source document). `knitrdata` provides a simple mechanism for integrating arbitrary text or binary data directly into Rmarkdown source documents, thereby allowing one to create standalone source documents that include all the elements necessary for conducting analyses. This integration is done with minimal additional formatting of the data (e.g., allowing one to insert comma-separated value (CSV) data without escaping quotation marks directly into Rmarkdown documents) and in a way that clearly visually separates data from R code, thereby facilitating comprehension of the different elements that contribute to analyses. `knitrdata` also facilitates encryption of data integrated into Rmarkdown source documents, thereby allowing one to merge data with analysis code and text even in cases where industrial or ethical privacy constraints restrict data access to a specific group of individuals.
Below, I briefly provide a conceptual overview of how `knitrdata` works, presenting some simple examples of its use and the tools available to facilitate integrating data into Rmarkdown source documents. I then discuss typical use cases and workflows for development of Rmarkdown source documents with `knitrdata`, as well as a number of potential caveats for its use. I conclude by reflecting on the value of `knitrdata` for achieving computational reproducibility and its place within the growing pantheon of tools that make Rmarkdown an increasingly essential tool for research.
# knitrdata installation and usage
The `knitrdata` package is available on [CRAN](https://cran.r-project.org/package=knitrdata), though the latest version can be installed from [github](https://github.com/dmkaplan2000/knitrdata) using the \CRANpkg{remotes} [@R-remotes] package:
```{r eval=FALSE,echo=TRUE}
remotes::install_github("dmkaplan2000/knitrdata",
build_vignettes=TRUE)
```
Once the package has been installed, all that is needed to use the functionality provided by the package in a Rmarkdown source document is to load the library at the start of the document, typically in the `setup` chunk:
```{r echo=TRUE}
library(knitrdata)
```
# Conceptual overview of `knitrdata`
To understand how `knitrdata` works and the functionality it provides, one must first understand some of the terminology and functioning of Rmarkdown itself. As previously mentioned, Rmarkdown documents are a combination of text written in *markdown*, a simple, structured text format that can be translated into a large number of final output formats, and code for doing analyses that can augment the final output document with analytic results, tables and figures. The code is contained in specially delimited blocks, referred to as *chunks*. For example, adding the following to an Rmarkdown document:
````markdown
`r ''````{r}
plot(-5:5,(-5:5)^2,type="l")
`r ''````
````
would add a plot of a parabola to the final output document. The process of translating a Rmarkdown document into a final output document is known as *knitting*, and this process is carried out using (often implicitly via RStudio) the \CRANpkg{knitr} package [@knitr2015].
Though code chunks typically contain R code, `knitr` supports a large number of other *language engines*, allowing one to integrate analyses in a number of other computer languages, including C, Python and SQL. For example, one could use the SQL language engine to import the contents of a database table into the R environment by including the following chunk in a Rmarkdown source document:
````markdown
`r ''````{sql connection="dbcon",output.var="d"}
SELECT * FROM "MyTable";
`r ''````
````
During knitting, this will create in the R environment a variable `d` containing the contents of the table `MyTable` accessible via the (previously created) active R database connection `dbcon`. Note that the name of the database connection and the name of the output variable are supplied in the chunk header via what are known as *chunk options*. Though this database table could be imported into the R environment without the SQL language engine using R code:
````markdown
`r ''````{r}
d = dbGetQuery(dccon,"SELECT * FROM \"MyTable\";")
`r ''````
````
the use of the SQL language engine has both practical and conceptual advantages. On the practical side, it avoids the need to escape quotation marks and allows text editors to recognize and highlight the code as SQL, both of which becoming increasingly valuable as the length and complexity of SQL queries increase. On the conceptual side, using the SQL engine visually separates database queries from R code and text, thereby better communicating the structure and functioning of analyses in Rmarkdown documents.
The `knitrdata` package works in many ways analogously to the SQL language engine, adding a new `data` language engine to the list of language engines known to `knitr` that is specifically designed to import raw "data" into the R environment and/or export it to external files. Here the term "data" is used in a very wide sense, including not only standard data tables (e.g., CSV text files) or binary data (e.g., RDS files, NetCDF files, images), but also text and formatted text (e.g., XML files, BibTeX files). For example, placing the following chunk in a Rmarkdown source document will, during the knitting process, create in the R environment a data frame `d` containing the contents of the comma-separated values (CSV) data in the chunk (provided that the `knitrdata` package has been previously loaded as described above):
````markdown
`r ''````{data output.var="d",loader.function=read.csv}
name,score
David M. Kaplan,1.2
The man formerly known as "Prince",3.4
Peter O'Toole,5.6
`r ''````
````
```{data output.var="d",loader.function=read.csv,echo=FALSE}
name,score
David M. Kaplan,1.2
The man formerly known as "Prince",3.4
Peter O'Toole,5.6
```
As with the SQL language engine, the name of the output variable for the chunk is supplied with a chunk option and in this example a `loader.function` option instructs `knitrdata` how to translate the contents of the chunk into a usable R object (in this example the R function `read.csv` is used to translate the CSV data into a data frame).
There are of course a number of other ways that such a simple data table could be imported into the R environment, including via an external data file or directly in R code, one approach to which might be:
````markdown
`r ''````{r}
d = read.csv(textConnection(
"name,score
David M. Kaplan,1.2
The man formerly known as \"Prince\",3.4
Peter O'Toole,5.6
"))
`r ''````
````
However, using the `data` language engine has much the same practical and conceptual advantages as the SQL data language engine, avoiding the need for escaping certain characters and visually separating data from code, both of which become increasingly valuable as dataset size increases.
Incorporating binary data into Rmarkdown source documents is a bit more complicated as the data must first be *encoded* as ASCII text (see the Section below on [Binary data chunks](#binary) for details), but the basic principles are the same - encoded binary data is incorporated into a `data` chunk and chunk options are used to tell `knitrdata` how to decode the data and load it into the R environment during knitting (see Table \@ref(tab:knitrdatachunkops) for a full list of `data` chunk options). There is also the possibility of saving `data` chunk contents out to external files using the `output.file` chunk option. This option is particularly useful for integrating into Rmarkdown source documents ancillary text files used in the final formatting of the output of the knitting process, such as BibTeX files with references, LaTeX style files for PDF output and CSS style files for HTML output. For example, the following chunk would export a BibTeX reference to a file named `refs.bib`, taking care not to overwrite an existing file with the same name [though note that similar functionality can also be achieved with the `cat` language engine; @XieMarkdownCookbook2020]:
````markdown
`r ''````{data output.file = "refs.bib", eval=!file.exists("refs.bib")}
@book{allaireRmarkdownDynamicDocuments2020,
title = {Rmarkdown: {{Dynamic}} Documents for r},
author = {Allaire, JJ and Xie, Yihui and McPherson, Jonathan and Luraschi, Javier and Ushey, Kevin and Atkins, Aron and Wickham, Hadley and Cheng, Joe and Chang, Winston and Iannone, Richard},
year = {2020}
}
`r ''````
````
As code chunks are processed during knitting before generating the final output document, these files can be generated at any point during the knitting process using `data` chunks (in particular, it is often most practical to place this information at the end of a Rmarkdown document).
```{data output.var="t",loader.function=read.csv,loader.ops=list(sep="|",check.names=FALSE),echo=FALSE}
Chunk option|Description
`format`|One of `'"text"'` or `'"binary"'`. Defaults to `'"text"'`.
`encoding`|One of `'"asis"'`, `'"base64"'` or `'"gpg"'`. Defaults to `'"asis"'` for `format='"text"'` and `'"base64"'` for `format='"binary"'`.
`decoding.ops`|A list with additional arguments for `data_decode`. Currently only useful for passing the `verify` argument to \CRANpkg{gpg}::`gpg_decrypt` [@R-gpg] for `gpg` encrypted chunks.
`external.file`|A character string with the name of a file whose text contents will be used as if they were the contents of the data chunk.
`md5sum`|A character string giving the correct md5sum of the *decoded* chunk data. If supplied, the md5sum of the decoded data will be calculated and compared to the supplied value, returning an error if the two do not match.
`output.var`|A character string with the variable name to which the chunk output will be assigned. At least one of `output.var` or `output.file` must always be supplied.
`output.file`|A character string with the filename to which the chunk output will be written. At least one of `output.var` or `output.file` must always be supplied.
`loader.function`|A function that will be passed (as the first argument) the name of a file containing the (potentially decoded) contents of the data chunk.
`loader.ops`|A list of additional arguments to be passed to `loader.function`.
`line.sep`|Only used when `encoding='"asis"'`. In this cases, specifies the character string that will be used to join the lines of the data chunk before export to an external file, further processing or returning the data. Defaults to `knitrdata::platform.newline()`.
`eval`|A boolean indicating whether or not to process the chunk. Defaults to `TRUE`.
`echo`|A boolean indicating whether or not to include chunk contents in Rmarkdown output. Defaults to `FALSE`.
`max.echo`|An integer specifying the maximum number of lines of data to echo in the final output document. Defaults to 20. If the data exceeds this length, only the first 20 lines will be shown and a final line indicating the number of ommitted lines will be added.
```
```{r knitrdatachunkops,echo=FALSE,eval=TRUE,results='asis'}
t = t[order(t$`Chunk option`),]
label = knitr::opts_current$get('label')
pander::panderOptions("table.alignment.default","left")
pander::pander(
t,caption=paste0("(\\#tab:",label,") Full list of knitrdata chunk options."),
split.cell=50,row.names=FALSE)
```
```{r knitrdatachunkopskable,echo=FALSE,eval=FALSE}
t = t[order(t$`Chunk option`),]
knitr::kable(t,caption="Full list of knitrdata chunk options.",
booktabs=TRUE,row.names=FALSE) |>
kableExtra::column_spec(2,width="30em")
```
Using `data` chunks, just about any data or information that would typically be stored in external files can be integrated directly into Rmarkdown source documents. In particular, this permits creating standalone Rmarkdown source documents that can be knitted without need for external data files, thereby uniting text, code and data in a single source document.
Note that this is different from the `self_contained` YAML header option permitted by some Rmarkdown output formats, notably HTML output formats. This option attempts to create a single *output* file that contains everything needed to visualize the final output document (e.g., in the case of HTML documents, the output HTML file will contain any CSS styles, javascript libraries and/or images used by the document), but it says nothing about whether or not external files are needed to knit the Rmarkdown source document (i.e., it is relevant to the output side of knitting, not the input side). In fact, a source document can be standalone in that all data and formatting files needed for knitting are incorporated within it using `data` chunks, but the final output (HTML) document may not be self contained because it relies on external files or libraries for visualization, and vice-versa (i.e., standalone source documents and standalone output documents are two separate and independent concerns).
Under the hood, the way `knitrdata` works is by adding (using the `knitr::knit_engines$set()` function) to the list of language engines that `knitr` maintains internally a `data` entry that points to a function inside the `knitrdata` package that processes `data` chunks (specifically the `eng_data` function, though users would typically not interact directly with this function). When knitting a Rmarkdown document, `knitr` will call this function each time a `data` chunk is encountered, passing it both the textual contents of the chunk and any chunk options. The function then uses this information to process the chunk, decoding it if necessary (via the `format` and `encoding` chunk options) and returning it as either a variable in the R environment (`output.var` chunk option) and/or an external file (`output.file` chunk option) after any additional processing has been carried out (via, e.g., the `loader.function` chunk option).
## Text data chunks
Though a basic example of a `data` chunk containing CSV tabular data has been presented in the previous section, it is useful to develop that example a bit more to better understand the functioning of `knitrdata`. The simplest `data` chunks contain plain text that is read, but not processed by `knitrdata`. For example, omitting the `loader.function` chunk option from the previously presented `data` chunk with CSV data produces a different outcome:
````markdown
`r ''````{data output.var="txt"}
site,density
a,1.2
b,3.4
c,5.6
`r ''````
````
During the knitting process, this will place the text contents of the chunk into a R variable named `txt`, but no further processing of the text will be carried out (i.e., the variable `txt` will contain the literal text contents of the chunk, excluding the header with the chunk options and the tail). One could later convert the text into a R `data.frame` using the `read.csv` command in a R chunk placed after the `data` chunk:
````markdown
`r ''````{r}
d <- read.csv(text=txt)
`r ''````
````
The `loader.function` chunk option used in the initial `data` chunk example above causes `knitrdata` to combine into one process the two steps of (1) reading in the chunk contents and (2) converting them into a usable R data object. Whereas the first of these steps, reading the chunk contents, is carried out for all `data` chunks, the second only occurs if the `loader.function` chunk option is given. `loader.function` should be a function that takes in the name of a file containing the chunk contents and returns the processed contents. Though `read.csv` is likely to be a common choice, there are many other possibilities including `readRDS`, `read.csv2`, `scan`, `png::readPNG` and custom, user-defined functions. One can also supply a list of additional input arguments to the loader function using the `loader.ops` chunk option (e.g., one could change the expected separator in CSV data using `loader.ops=list(sep="|")`).
## Binary data chunks {#binary}
Though text data chunks can integrate into Rmarkdown source documents many small- to medium-sized tabular data sets, binary data formats, such as RDS files, are more convenient for more complicated and/or larger data sets. Incorporating binary data into Rmarkdown documents requires additional steps relative to text data: encoding the binary data as text and telling the `data` chunk how to decode the encoded data. `knitrdata` provides tools for simplifying these two steps that currently support encoding and decoding of two widely-used encodings: `base64` and `gpg`. [`base64`](https://en.wikipedia.org/wiki/Base64) is a standard format for encoding binary data as ASCII text based on translation of 6 bits of information into one of 64 alphanumeric and symbolic ASCII characters. Base64 encoded data looks like a somewhat intimidating jumble of characters, but the format is extremely widely used behind the scenes in many common web applications, such as email attachments and embedding images in HTML pages. In particular, `base64` is widely supported by a number of software packages and programming languages, including R, Python, Matlab and Julia, so `base64` encoded data is highly readable and likely to remain so for a very long time.
`gpg`, standing for [GNU Privacy Guard](https://gnupg.org/), is a standard protocol for encrypting information so that only those with specific decryption keys can have access. This format can be used to ensure that only specific individuals can actually read and utilize the data contained in a Rmarkdown source document, as might be necessary when dealing with confidential (e.g., medical or trade-secret) data. Here, I focus primarily on `base64` encoding as this is the simplest and likely most common format for binary `data` chunks, and a full description of the configuration and use of GPG is beyond the scope of this document. The detailed use of `gpg` is, however, described in the package vignette.
Though `knitrdata` users rarely need to encode data by hand as the package provides [graphical tools](#addins) for this, it is instructive to have a basic understanding of the underlying functions for encoding and decoding data: `data_encode` and `data_decode`. `data_encode` takes the name of the file containing the data and the name of the encoding format, and it returns the encoded data that one would incorporate into a `data` chunk, either to the R command line or to a file. For example, if one saves the data frame `d` created in the previous section to a binary `RDS` file:
```{r echo=TRUE}
saveRDS(d,"data.RDS")
```
then one can encode this data as `base64` using:
```{r echo=TRUE}
b64 = knitrdata::data_encode("data.RDS","base64")
cat(b64)
```
This jumble of characters starting with `"H4sI"` is the base64 encoded contents of the binary file that one would place in a `data` chunk. For large files, it is often more practical to output the encoded data to a file by supplying the `output` argument:
```{r echo=TRUE,comment=NA}
knitrdata::data_encode("data.RDS","base64",
output="data.RDS.base64")
```
GPG encoding works similarly to base64 encoding, but one must change the format from `"base64"` to `"gpg"` and specify the encryption key (i.e., the receiver ID) to be used to encrypt the data.
Once one has the encoded data, one can use it in a `data` chunk by supplying the `format="binary"` chunk option and, optionally, an appropriate `loader.function` to convert the data into a R object:
````markdown
`r ''````{data format="binary",output.var="d",loader.function=readRDS}
H4sIAAAAAAAAA12OvQvCMBDFz48OKn6A4Hybk11c3HQQFxE7VHA9aopimkgiFjf/
Z2etl5oOesO93I/3crdvA0ADmnXuAT8h2MWryYynIQ9MYfA1QIu1v6Tb6YCbENd0
kaQ8xvgoMCOFqTaZMPKOZ6VzhWQxMieVCO/rRuIqDG7HsdZSMOi5v+fPaVmLjtdR
WhaUV0HNhwNFmbD+oLqHTQcrg020Ef+pRJKtUhVsH+hKYWpc9tfeMjoPq0Vdt+jB
rSiKF8v7A6bdy9EtAQAA
`r ''````
````
```{data format="binary",output.var="d",loader.function=readRDS}
H4sIAAAAAAAAA12OvQvCMBDFz48OKn6A4Hybk11c3HQQFxE7VHA9aopimkgiFjf/
Z2etl5oOesO93I/3crdvA0ADmnXuAT8h2MWryYynIQ9MYfA1QIu1v6Tb6YCbENd0
kaQ8xvgoMCOFqTaZMPKOZ6VzhWQxMieVCO/rRuIqDG7HsdZSMOi5v+fPaVmLjtdR
WhaUV0HNhwNFmbD+oLqHTQcrg020Ef+pRJKtUhVsH+hKYWpc9tfeMjoPq0Vdt+jB
rSiKF8v7A6bdy9EtAQAA
```
During knitting, this chunk will be processed, decoding the encoded binary RDS file and loading it into the variable `d` using the `readRDS` function. `knitrdata` will by default assume that the encoding is base64 when `format="binary"`, but one can also specify the chunk option `encoding="base64"` for increased clarity. For GPG encoded data, one would use `encoding="gpg"`. As with text `data` chunks, one can alternatively output the decoded contents of the chunk to a file (`output.file` option) or return it to the R session as a `raw` binary vector (by not supplying a `loader.function`).
## RStudio add-ins for creating data chunks {#addins}
```{data insertdialogdatachunk, format = "binary", encoding = "base64", output.var = "insertdialog", echo = FALSE, md5sum = "2cbca10413739a943476bcf5c7ebe3a7", eval=TRUE,loader.function=png::readPNG}
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
Q0qVKsXYsWOJiYlh3bp1jBgxAlNTUx4/fpxr+erVq7N7926GDBlCVlYWo0aNol69
ekyYMAEDAwNsbGz44IMPZA8QuTp8+DBFihShRIkS7Ny5k8OHD7NgwQJsbW3RarV4
eXn9/5HuM3fHmjBhAh06dKBTp04YGBiwbNmyXE8n2NjYkJiYSEpKijK6sm3btuce
4KlUKrRabbbQL6g6deowffp0+vbty6pVq/D29n7p9rl16xbt2rXjiy++ICwsjOnT
p7NixQoqVKhAzZo1CQwMVOZ9+PBhthB8tr2e/be1tXWeZaOiomSjfMPtvxhJOZvC
LP+yIZlZOh7EPuHbTRcoXez/b0N4+k4sHtWKM6unM4WNDflp73Ui4lLo4lqO6d3r
kJKeSTFzI3S6p7cx7OVRiR93XmFCh5pk6XREJ6ax5/z/jyheCIvng5oZzOzhjIEB
TNl8kWqlLXOs25bQMMZ+XIOHcSk8Tkp/7nuZuf0yP36m4bPbj0nT/v1PyjH8uxfQ
q1cvevXqlaPHuXz58hzz6i/IKF++vPLvoUOHZpunRIkSzJs3L9tr06dPl73gHafT
6ZQv6/T0dE6fPs2iRYv44osvUKvVJCQkYGJigqWlJVqtlqVLl6LVasnIyFB6gPfv
38fW1pakpCSsra0xMDDg7t27bN++nQoVKuRYZvHixalWrRpLlizBx8eHu3fvsmDB
AmbNmpXvutrb27N06VKuX79OsWLFWL9+fcF3WEND1Go1Q4YMYdiwYTRt2pSyZcu+
VJv99ttvZGRkMGLECIoVK4ahoSEWFha4urqyYMEC9u3bR5MmTbh27RojRoxgwoQJ
ODs756hHrVYTExNDXFxcvmX1Q83izbb0wC2WHriV7bWbkUlM+N+FQQDfb895LtJ7
/rEcr/VeeFz591dLT+YTfNnrG7XuT+XfY/93UVHY4yd8MudInvPp//3sa11nH/nH
2s1QNh3xX5CcnEyXLl0AMDU1pUyZMgwYMIAWLVoA0Lp1a86ePUunTp0wMzOjQYMG
VK1alXv37lGtWjWaN2/OhAkT8PX15euvv2bRokX89NNPWFtb4+Xlxe7du3Nd7rhx
45g1axYdOnTA3NycQYMGPbdnqtFoaN68OcOGDcPU1JRPP/2Uq1evvtD7rV69Ok2b
NiUwMJBZs2a91H2n+/Xrx3fffUenTp2Ap+c3u3btiomJCVOmTGHevHnMnDkTS0tL
fHx8cg1SeHped926dQwePJjly5fnWVZ/YZYQ/0WqxKSkXH8gFnLsGA0aNMi38LVr
1/Lcwd40oaGhODo6yicuhHgnuY3eSiELa2mIv8hIjOHw5DZ5Tj9+/Dgurq751rF+
3Tq5naAQQgjxqiRMhRBCCAlTIYQQQsJUCCGEeDfDVKfTYWJi8ta8UVNTU7kZtxDi
naTNzMLCzEQaIhcWZiZoM1/9d6gvHaYqlQoDA4O34tFn+nV8mZ8PCCHE285QbUAR
s0JkpqVIYzwjMy0FS1NDDNWvPkj7Sr8zLV26NGFhYcTExJCS8mZ+SKampqhUKuzt
7WXLEUK8s2b3aciXPx0m4UkiT9LS3/n2MDMxwrpwIeb0afR6DlhepbBKpaJMmTLo
dLo3ttf3Jq+bEEL8U2zNjdkwvBnazKzX0hN7273udngtNb3JYSVBKoQQz/SgJEj/
lnaQVhVCCCEkTIUQQoh/uaeb38RHjx5JCwkhhBCvEqby4G0hhBBvu4SEhJcuW9Cn
HckwrxBCCPGKJEyFEEIICVMhhBBCwlQIIYSQMBVCCCEkTIUQQoh30NatWyVMhRBC
iFcN0tcRqBKmQggh3vke6asGqoSpEEKIdzpIX0egGkqzCiGEeJe0adPmtdcpPVMh
hBBCwlQIIYSQMM0mLCxMPpVXlJSURFxcnDSEeOv2T9n/pY0lTJ+xZs0aNBoNrVu3
Jisrq8DlVq5cySeffKL8PWXKFDQaDeHh4X9bA+zduxeNRsPmzZv/Ex/oiRMn+Pjj
j7l///5rqe/OnTtoNJpcd8Bp06ah0Whe27JeZh3eVBs2bODDDz8E4MCBA3Tt2pVG
jRrRuXNngoODlfmuXbvGZ599hru7Oz4+Ptne48uW+6vmzZvTuXPnF34Pu3btQqPR
8Pvvv+e6f77u/etF6//mm28YO3YsAEuWLKFVq1a4u7vTr1+/bE/62LlzJ+3ataNJ
kyZMmDCBlJQUZdrLlstt+5w2bdq/0sYF3Q91Oh2+vr4vtZ76z/HZ/xo3bkzv3r25
cuXKa9lnOnfujJeXl4Tps7Zs2QJAREQEx44dK3C5P/74g/T0dOVvJycnmjZtiqmp
qRz2FNCpU6d4/Pjxa63Pzs4Oe3v7f/U9/dvr8KJCQ0Nxdnbm/v37+Pr6kpqaSufO
nUlMTMTPz4+wsDC0Wi2DBw8mLCyMVq1acenSJYYNGwbw0uVep+LFi9O0aVNKliyZ
6/75ur1o/adPn8bZ2ZmgoCDmzZtH6dKladOmDX/++SdDhw4F4MaNG4wdOxYjIyMa
NWpEUFAQP/74I8BLl3tb2zgzM5N9+/ah0+leug4nJyc+/vhj2rdvj5OTE2fPnmXU
qFFvzX559uzZAv/3r4fphQsXuHHjBu7u7gBs2rQp2/S4uDjGjBmDp6cnTZo0YeLE
iaSmpjJjxgz+/PNPMjIy0Gg03LlzhytXrrB//35SUlLw8fHBxcVFeS5dVFQU9erV
45tvvlG+cLt3707Dhg3p2bMnly5dynX9UlNT+fbbb2nSpAndunXj4sWL2aanpKQQ
EBCAp6cnTZs2ZeTIkURGRmbrEfj4+ODu7s6HH37IypUrlS8/jUbDlClTlHmbNWtG
t27dAFi2bBkajYZly5bRrl07PD09WbBgAatWrcLLywtPT09+++03pezatWv56KOP
cHNzY/jw4cTGxgKwfft2NBoNCxcupHPnzri7uzN8+HCSkpIIDg5myZIlAHz++eds
2LABrVaLRqNhwIABL/V5nj59Go1GA8CDBw/o168f77//PoMHD84R2mFhYQwePBh3
d3datWrFrFmzSEtLy3Z027lzZxo1akTXrl2VA63Y2FiGDx+Oh4eH0tO6c+dOruvg
5eVF3759mTRpEm5ubnTp0oUzZ84AoNVqlc/OxcWFjh07EhISAsDmzZvRaDQsXbqU
du3a4eHhwdSpU5UvrtTUVKZOnYqnpyfNmjVj1qxZZGZmAjBy5Eg8PDz49ttvady4
MUFBQVy8eBFvb2/c3Nxo2rQpY8eO5cmTJ8o6nzlzRuktODo64ufnx+DBg/niiy/Q
arVcvXqV06dP8+jRIzp27Iifnx8tW7bk5s2bXL9+/aXLPc+MGTPQaDTMmTMHgHbt
2vH5558zZcoUGjduzEcffcTevXsBiIyMZP/+/Tx8+DDX/TO3dnne/nX69Gm6d++O
q6srHh4ejB8/nvT09Fzrz2tefW8wJiYGjUZDdHQ0jo6OBAYGMmLECN5//33CwsKI
i4tjz5496HQ6hg8fjr+/P2XKlGHXrl0AL10uP+np6Xh7e1O/fn0OHz5MZGQkGo2G
SZMm8dVXX9GoUSN69OjBzZs3X7qNn7cfbtiwgdatW+Pi4oKXlxcrVqwAoEePHgCE
hITQvHnzfD+PvLi7uzNq1ChGjx7NwoULsbKy4v79+2RmZr7wd9zx48fp1KkTTZs2
ZcaMGWi1WhnmfZZ+OOfLL7+kRo0aHDp0iEePHinTx40bx+7du2nVqhWenp78/vvv
zJkzBw8PD0qWLIlarWbw4MEULVo0W71t2rRBq9Wyf/9+AHbv3o1Op6N169ZERUUx
ZMgQ0tPTGTRoEImJiQwaNIjk5OQc67do0SK2bNlC/fr1admyZY6wnzBhAhs2bKBu
3bp4eXlx8OBB+vfvT3p6OklJSQwYMIBbt27h7e1NuXLlmDVrVrbht+fZuXMnQ4YM
oVixYixatIgdO3bg6+uLiYkJ06ZNIy0tjf379zNjxgwqVapE7969CQkJUYaz9DZu
3Ej//v3x8PAgODiYzZs3U6lSJerVqwdAly5dqFmzJiqViooVK1KqVKlc1+f8+fP4
+/szb948Hjx4oASL/ktQf/QPMHr0aEJDQ+nYsSNly5Zl37592Q5CvvzyS44fP07b
tm2pVq0aK1euZOrUqcpBlp+fH0ZGRvTp04eUlBSGDRtGdHQ0P/30E4cPH2bIkCEM
Hz6cS5cu8dNPP+XogTzb69PpdIwaNYr4+HiGDRtGQkICGzZsYMOGDTRp0oSBAwcS
ERHBjBkzcpyC6N27N56enmzcuJFly5YBMHv2bDZu3MiHH35Iy5YtWblyJb/88otS
LikpiYsXL9K6dWucnZ0ZP348cXFxjB8/ng4dOrBnzx7lN2p37twhOjoaZ2dnGjZs
yIoVK3BxcVHaAaBSpUrcvXsXgNKlSwNQtmxZAO7evfvS5fKzdetW1q5dS/Pmzfnq
q6+ybQMGBgaMHz+ehIQE/P39lQMJvbz2z7+2S377l1arxc/Pj+TkZAYPHkzt2rXZ
tm0bwcHBOeq3sLDIc179NlC8eHHs7e3x9vZm9erVWFhYkJGRwbVr17CxscHKyirX
tkpISCA2Nvaly+Vn8uTJXLhwgZEjR+Lm5qa8/vvvv+Ph4UG/fv24fPkys2fPzlG2
oG2c3354/fp1AgICsLe3Z9iwYRQuXJgff/yRmJgYunfvDkC5cuXw8fHJ9/PIb8Rl
wYIFzJ8/Hz8/P+Li4nB2dkatVr/Qd1xsbCwjRozg8ePH9OrVi7CwMO7du/dWh+lr
/Z1pSkoKu3fvxsHBAUdHR1q3bs358+fZsmULvXv35vHjxxw9epQmTZrw9ddfA+Ds
7EzlypWpVKkSdnZ2REdHK0dQz2rWrBnTpk1TzmPs3LkTa2trXFxcWLNmDampqQwZ
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
ibNnz7J79248PDyYN28ehQoVwtzcnDlz5lClShU2btxIVFQUX3/9NR4eHhgZGeHr
64uxsTHLli2jYcOG+X655adVq1b069eP8+fPM3v2bMqVK8cPP/yg9Ezy06xZM8qX
L8/Ro0e5e/cuOp2O69evv/BvNO/fv8+jR4+yDVdOmjSJevXqsWjRIkJCQmjbtq0y
zdzcnIULF+Lq6sq2bdu4fPkyn332GSNHjgSgZs2aynm0NWvWYGlpyYwZM7C1tWX8
+PF4eXmxbt06pkyZQrFixZg5cyYPHz7MsQ4A5cuXp0qVKqxdu5YSJUoQGBiIubk5
AwYMoFKlSgwdOpRly5bh7u5OWlpatiuDu3TpwtGjRzl//jydOnVSzk0NHToULy8v
fv31V9asWYOnpyejR4/OtW2MjY2ZPXs2Tk5OBAYGMn/+fBo3boyfn59yvlT/Rb91
61alp3HkyBEOHDjAgQMHiIiIwMTEhLlz52Jvb6+cs9VfMPWy5Z6nZ8+eWFhYMHfu
3Bcayi3o/pnf/lW1alV69uzJyZMn6devnzIcrP+d4rP129jY5DnvX3v++itEk5KS
lHY6cOAAqampVKtWDX9/f1JTUzl48CAffvghgwYNeqVyz9O/f3/S0tJYsGDBC+/7
BWnj/PbD9u3b06hRIxYtWsTo0aNxdXVVDuoAunfvrlzbUqVKlXw/j9u3b2f73e1f
tWzZEhcXF8LCwnKM4jyPhYUF33//PVZWVnz33XcYGBhkO/XwNlIlJiXlOh4YcuzY
W39CWPz3eHl5YWFh8cJHwps3b8bf31/56YwQ4t2hv6DuRX4/Wrt2beDpjXBc/ndQ
kpf169bJvXmFEEKIVyVhKoQQQrwieZ6peKvoL6h4Ue3ataNdu3bSgEII6ZkKIYQQ
EqZCCCGEhKkQQgghJEyFEEKINzlMvb290Wg0ud5fUX/7rwkTJry1jfXsI9X+bklJ
SUyYMIFmzZrRrFkzxo0bp9xCT0+n0zFw4EDlMVQFnSaEEOL1+seu5jU2NqZp06ZU
q1ZNWr0AAgMDCQoKolWrVqSlpbF9+3YMDQ0ZN26cMs/q1avzfPh6ftOEEEK8wT3T
/Oif06l/aPe3336LRqNh/fr1tGzZkmbNmikPLIanNzMfOHAg7u7utGnThm3btuVa
b34Py4and8zp0KGDMv/IkSPRaDQkJiZy/vx5NBoNgYGBeHt78/777+Pn58eBAwfo
3Lkzbm5uTJ48OduNp7VaLdOmTaNJkyZ07dpVeVoD5P2A8hs3bqDRaBgzZgytWrWi
Y8eOygOA83pod0pKCh4eHkycOJGAgACKFSuW7UHLV65cYfbs2Tme+/q8aUIIId7i
MM3L7t27GTNmDCVLlmTZsmVcvnyZrKwshg0bxp9//kmfPn0oW7Ys48eP59y5c3nW
k9vDsgtqy5YtdO3aFVdXV/bu3cv48ePp3bs3devW5bfffssWmLdv3yYmJoZevXoR
ERHBsGHDiI+PL9ADynft2oW7uzvt27fHwMAg34d2BwQEKPdbvX//PvHx8cq9hlNS
Uhg9ejQuLi45bo2X3zQhhBB/j3/9pg1DhgyhevXq3L9/nytXrvDgwQNUKhXXrl3j
008/pWfPnrRt25ZmzZqxfft2atasmWs9uT0su6A+/PBDWrZsiampKXv37qVdu3Y0
b96c9PR0jh49mu1xR1ZWVkyZMgVDQ0O0Wi1z587l5MmTRERE5PmA8goVKgBPb/r/
7JNbCnJ/WX1IFypUiD59+gAwY8YMEhMTGT9+vPLYL738pgkhhPiPhqn+QbL6h/Vm
ZmYqz+dbu3YtGzZsUObNLyAL+rDs3F7/68NsixUrlu3vZ8vY2Ngoj/XSP9j28ePH
+T6gXB+mzz7QtyAePnxIv379iImJ4fvvv6d8+fJcunSJLVu2UK1aNebPn6/cuHn2
7Nk0adIkz2k+Pj4vvHwhhBBvSZjm9iBa/cO+P/74Y7p160ZaWhrh4eHZHo5dkHoA
1Gp1tod053Zl61+fO5rfc0jDw8NJTU3FxMRECXc7OztlGaNHj6ZGjRo8fvyYjIwM
KleuzKNHj7KFc0HExsbi4+NDQkIC8+fPp0aNGgDKFb2XLl1SzskCbNu2japVq+Y5
rWPHjhKmQgjxNoWp/vl0evXr11ceZ1MQ7733HmXKlGHnzp2ULl2aCxcusGfPHnx9
fXM8f/R57O3tOXXqFLNmzeLJkydcvnz5ld5bWloaAwYMwNnZmbVr11K0aFHq16+P
g4NDng8oz01mZma+D+2ePHkyDx8+xN7enmXLlim97zFjxnDq1CllvmnTpvHrr78q
z4Ds2rVrntOEEEL8TR3Dv6PSzZs3s2nTJuW/F3mGnL6XGRgYiIODA3PnziU0NJQv
vvjiuU+6z82gQYMoV64cv/76K6mpqXz88cev9N4aNWpE9erVWb16NSVLliQwMBAz
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