R Under development (unstable) (2025-12-17 r89193 ucrt) -- "Unsuffered Consequences" Copyright (C) 2025 The R Foundation for Statistical Computing Platform: x86_64-w64-mingw32/x64 R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > library(knitrdata) > library(magrittr) # For pipe operator > > # Use a temporary directory ---------------------------- > owd = getwd() > td = tempdir() > setwd(td) > > # Create simple text files ------------------ > > # Text file with platform line separator > pn = platform.newline() > txt = paste0(pn,"Hello",pn,pn,"Goodbye",pn,pn) > txt.fn = "test.md5sum_chunks.txt" > writeChar(txt,txt.fn,useBytes=TRUE,eos=NULL) > txt.md5 = tools::md5sum(txt.fn) > > # Text file with opposite line separator > opn = ifelse(pn=="\n","\r\n","\n") > txt2 = paste0(opn,"Goodbye",opn,opn,"Hello",opn,opn) > txt2.fn = "test2.md5sum_chunks.txt" > writeChar(txt2,txt2.fn,useBytes=TRUE,eos=NULL) > txt2.md5 = tools::md5sum(txt2.fn) > > # Chinese text > ch.txt = "发动机测谎报告" > ch.fn = "test.md5sum_chunks.ch.txt" > writeLines(ch.txt,ch.fn,useBytes=TRUE) > ch.md5 = tools::md5sum(ch.fn) > print(ch.md5) test.md5sum_chunks.ch.txt "607d4928052edb4f05c83a86c487b8d5" > # MD5 sums of Chinese text do not work on Windows, likely due to character encoding translation issues!!! > # This webpage seems pertinent: https://stackoverflow.com/questions/38230026/how-to-print-chinese-letters-from-r > > # Create a simple binary file ---------------- > d = data.frame(x=1:3,y=letters[1:3]) > rds.fn = "test.md5sum_chunks.RDS" > saveRDS(d,rds.fn) > rds.md5 = tools::md5sum(rds.fn) > > # Create Rmarkdown doc -------------- > rmd.fn = "test.md5sum_chunks.Rmd" > if (file.exists(rmd.fn)) + file.remove(rmd.fn) > rmarkdown::draft(rmd.fn,"github_document","rmarkdown",edit=FALSE) > > # Create chunks ------------------ > loadlib = create_chunk("library(knitrdata)",chunk_type="r",chunk_label="loadlib") > > lines = readLines(txt.fn) > lines2 = readLines(txt2.fn) > > co = paste0('md5sum="',txt.md5,'"') > loadtxt = + create_chunk(lines,output.var="txt",output.file="output.md5sum_chunks.txt", + format="text",echo=TRUE, + chunk_label="loadtxt",chunk_options_string = co + ) > > # Text chunk specifying explicitly newline character to use > oopn = ifelse(opn=="\n","\\n","\\r\\n") > co2 = paste0('md5sum="',txt2.md5,'",line.sep="',oopn,'"') > loadtxt2 = + create_chunk(lines2,output.var="txt2",output.file="output2.md5sum_chunks.txt", + format="text",echo=TRUE, + chunk_label="loadtxt2",chunk_options_string = co2 + ) > > loadtxt64 = data_encode(txt.fn,"base64") %>% + create_chunk(output.var="txt64",output.file="output.md5sum_chunks.64.txt", + format="text",echo=TRUE,encoding="base64", + chunk_label="loadtxt64",chunk_options_string = co + ) > > co2 = paste0('md5sum="',txt2.md5,'"') > loadtxt264 = data_encode(txt2.fn,"base64") %>% + create_chunk(output.var="txt264",output.file="output2.md5sum_chunks.64.txt", + format="text",echo=TRUE,encoding="base64", + chunk_label="loadtxt264",chunk_options_string = co2 + ) > > co = paste0('md5sum="',rds.md5,'"') > loaddata = data_encode(rds.fn,"base64") %>% + create_chunk(output.var="d",output.file="output.md5sum_chunks.RDS", + format="binary",loader.function=readRDS,echo=TRUE, + chunk_label="loadrds",chunk_options_string = co + ) > > showdata = create_chunk(c("cat(txt)","cat(txt2)","cat(txt64)","cat(txt264)","d"), + chunk_type="r", + chunk_label="showdata") > > # Chinese text - md5sum test fails on Windows > co = paste0('md5sum="',ch.md5,'"') > loadch = + create_chunk(file=ch.fn,output.var="chtxt",output.file="output.md5sum_chunks.ch.txt", + format="text",echo=TRUE, + chunk_label="loadchtxt" + #,chunk_options_string = co # MD5 sum fails on Windows + ) > > showch = create_chunk(c("cat(chtxt)","tools::md5sum('output.md5sum_chunks.ch.txt')"), + chunk_type="r", + chunk_label="showch") > > # Push chunks into document ------------------ > > # Insert in reverse order to not have to figure out line number > rmd.text = readLines(rmd.fn) > > rmd.text = insert_chunk(showch,11,rmd.text=rmd.text) > rmd.text = insert_chunk(loadch,11,rmd.text=rmd.text) > rmd.text = insert_chunk(showdata,11,rmd.text=rmd.text) > rmd.text = insert_chunk(loaddata,11,rmd.text=rmd.text) > rmd.text = insert_chunk(loadtxt264,11,rmd.text=rmd.text) > rmd.text = insert_chunk(loadtxt64,11,rmd.text=rmd.text) > rmd.text = insert_chunk(loadtxt2,11,rmd.text=rmd.text) > rmd.text = insert_chunk(loadtxt,11,rmd.text=rmd.text) > rmd.text = insert_chunk(loadlib,11,rmd.text=rmd.text) > > writeLines(rmd.text,rmd.fn) > > # List all chunks in document > chunklst = list_rmd_chunks(file=rmd.fn) > chunklst type label start end 1 r setup 6 8 2 r loadlib 11 13 3 data loadtxt 14 20 4 data loadtxt2 21 27 5 data loadtxt64 28 30 6 data loadtxt264 31 33 7 data loadrds 34 39 8 r showdata 40 46 9 data loadchtxt 47 49 10 r showch 50 53 11 r cars 61 63 12 r pressure 69 71 > > # View file in Rstudio ---------- > # rstudioapi::navigateToFile(rmd.fn) > > # Clean environment ------ > l = ls() > l = l[!(l %in% c("rmd.fn","owd"))] > rm(list=l) > > # Render document to test ------- > if (rmarkdown::pandoc_available(version="1.12.3")) { + system.time( + rmarkdown::render(rmd.fn) + ) + + # Check MD5 sum of Chinese text before and after + print(tools::md5sum('output.md5sum_chunks.ch.txt')) + } processing file: test.md5sum_chunks.Rmd output file: test.md5sum_chunks.knit.md "C:/PROGRA~1/Pandoc/pandoc" +RTS -K512m -RTS test.md5sum_chunks.knit.md --to gfm+tex_math_dollars-yaml_metadata_block --from markdown+autolink_bare_uris+tex_math_single_backslash --output test.md5sum_chunks.md --template "D:\RCompile\CRANpkg\lib\4.6\rmarkdown\rmarkdown\templates\github_document\resources\default.md" "C:/PROGRA~1/Pandoc/pandoc" +RTS -K512m -RTS test.md5sum_chunks.md --to html4 --from gfm+tex_math_dollars --output test.md5sum_chunks.html --embed-resources --standalone --highlight-style pygments --template "D:\RCompile\CRANpkg\lib\4.6\rmarkdown\rmarkdown\templates\github_document\resources\preview.html" --variable "github-markdown-css:D:\RCompile\CRANpkg\lib\4.6\rmarkdown\rmarkdown\templates\github_document\resources\github.css" --metadata pagetitle=PREVIEW --mathjax Preview created: test.md5sum_chunks.html Output created: test.md5sum_chunks.md output.md5sum_chunks.ch.txt "607d4928052edb4f05c83a86c487b8d5" > > # Clean up -------------- > setwd(owd) > > proc.time() user system elapsed 0.70 0.21 1.81