Back to Fan’s Reusable R =Code table of content.

```r
```r
options(knitr.duplicate.label = 'allow')

Jupyter Files and RMD

Rmarkdown in Rstudio is easier for debugging, and allows for easier interaction with current workspace.

Single Jupyter to RMD conversion

Rmarkdown has a conversion program: convert_ipynb.

# Generate Paths
spt_file_root = 'C:/Users/fan/R4Econ/summarize/summ/'
spt_file_name = 'ByGroupSummOne'
spt_file_full_ipynb = paste0(spt_file_root, spt_file_name, '.ipynb')
spt_file_full_rmd = paste0(spt_file_root, spt_file_name, '.rmd')

# Convert from IPYNB to RMD
file_nb_rmd = rmarkdown:::convert_ipynb(spt_file_full_ipynb)
st_nb_rmd = xfun::file_string(file_nb_rmd)

# Save RMD
fileConn <- file(spt_file_full_rmd)
writeLines(st_nb_rmd, fileConn)
close(fileConn)

# Convert to PDF and HTML
# rmarkdown::render(spt_file_full_rmd, "pdf_document")
# rmarkdown::render(spt_file_full_rmd, "html_document")

Multiple Jupyter to RMD conversion

Search in folder for ipynb files, and then convert collectively to Rmd.


spt_root <- 'C:/Users/fan/Stat4Econ/'
# if the path contains these skip

spn_skip <- c('summarize', 'panel', 'support')
spn_skip <- c('')

# Group A
spt_desc <- paste0(spt_root, 'descriptive')
spt_srvy <- paste0(spt_root, 'survey')
spt_summ <- paste0(spt_root, 'summarystats')
ls_path_group_a <- c(spt_desc, spt_srvy, spt_summ)

# Group B
spt_prob <- paste0(spt_root, 'probability')
spt_pbct <- paste0(spt_root, 'probcts')
ls_path_group_b <- c(spt_prob, spt_pbct)

# All ls_path_group_use
ls_path_group <- c(ls_path_group_a, ls_path_group_b)

# Group To Use
ls_path_group_use <- ls_path_group
# ls_path_group_use <- ls_path_group_temp

# Get Path
ls_sfls <- list.files(path=ls_path_group_use, recursive=T, pattern=".ipynb", full.names=T)

# Excludes elements of path that have exclusion strings
if (spn_skip != '') {
  ls_sfls <- ls_sfls[!grepl(paste(spn_skip, collapse = "|"), ls_sfls)]
}

# print
for (spt_file in ls_sfls) {
  # 1. Check if the RMD file has been modified or is new, if neither, do not generate pdf html
  # 2. store pdf and html files in a subfolder
  # 3. main folder keeps only Rmd file
  # 4. delete tex and other files

  # print(paste0('spt_file:', spt_file))
  
  st_fullpath_noname <- dirname(spt_file)
  st_fullpath_nosufx <- sub('\\.ipynb$', '', spt_file)
  st_file_wno_suffix <- sub('\\.ipynb$', '', basename(spt_file))

  setwd(st_fullpath_noname)
  spt_file_full_rmd = paste0(st_fullpath_nosufx, '.Rmd')

  print(paste0('st_fullpath_noname:', st_fullpath_noname))
  print(paste0('spt_file:', spt_file))
  print(paste0('spt_file_full_rmd:', spt_file_full_rmd))
  
  # Convert from IPYNB to RMD
  file_nb_rmd = rmarkdown:::convert_ipynb(spt_file)
  st_nb_rmd = xfun::file_string(file_nb_rmd)

  # Save RMD
  fileConn <- file(spt_file_full_rmd)
  writeLines(st_nb_rmd, fileConn)
  close(fileConn)

}
[1] "st_fullpath_noname:C:/Users/fan/Stat4Econ/descriptive"
[1] "spt_file:C:/Users/fan/Stat4Econ/descriptive/DataBasketball.ipynb"
[1] "spt_file_full_rmd:C:/Users/fan/Stat4Econ/descriptive/DataBasketball.Rmd"
[1] "st_fullpath_noname:C:/Users/fan/Stat4Econ/descriptive"
[1] "spt_file:C:/Users/fan/Stat4Econ/descriptive/MultipleVariables.ipynb"
[1] "spt_file_full_rmd:C:/Users/fan/Stat4Econ/descriptive/MultipleVariables.Rmd"
[1] "st_fullpath_noname:C:/Users/fan/Stat4Econ/descriptive"
[1] "spt_file:C:/Users/fan/Stat4Econ/descriptive/OneVariable.ipynb"
[1] "spt_file_full_rmd:C:/Users/fan/Stat4Econ/descriptive/OneVariable.Rmd"
[1] "st_fullpath_noname:C:/Users/fan/Stat4Econ/probability/binomial"
[1] "spt_file:C:/Users/fan/Stat4Econ/probability/binomial/binomial.ipynb"
[1] "spt_file_full_rmd:C:/Users/fan/Stat4Econ/probability/binomial/binomial.Rmd"
[1] "st_fullpath_noname:C:/Users/fan/Stat4Econ/probability"
[1] "spt_file:C:/Users/fan/Stat4Econ/probability/countrules.ipynb"
[1] "spt_file_full_rmd:C:/Users/fan/Stat4Econ/probability/countrules.Rmd"
[1] "st_fullpath_noname:C:/Users/fan/Stat4Econ/probability"
[1] "spt_file:C:/Users/fan/Stat4Econ/probability/lottery.ipynb"
[1] "spt_file_full_rmd:C:/Users/fan/Stat4Econ/probability/lottery.Rmd"
[1] "st_fullpath_noname:C:/Users/fan/Stat4Econ/probability"
[1] "spt_file:C:/Users/fan/Stat4Econ/probability/poisson.ipynb"
[1] "spt_file_full_rmd:C:/Users/fan/Stat4Econ/probability/poisson.Rmd"
[1] "st_fullpath_noname:C:/Users/fan/Stat4Econ/probability"
[1] "spt_file:C:/Users/fan/Stat4Econ/probability/samplespace.ipynb"
[1] "spt_file_full_rmd:C:/Users/fan/Stat4Econ/probability/samplespace.Rmd"
[1] "st_fullpath_noname:C:/Users/fan/Stat4Econ/probability"
[1] "spt_file:C:/Users/fan/Stat4Econ/probability/samplespacedice.ipynb"
[1] "spt_file_full_rmd:C:/Users/fan/Stat4Econ/probability/samplespacedice.Rmd"
[1] "st_fullpath_noname:C:/Users/fan/Stat4Econ/probability"
[1] "spt_file:C:/Users/fan/Stat4Econ/probability/samplespaceexa.ipynb"
[1] "spt_file_full_rmd:C:/Users/fan/Stat4Econ/probability/samplespaceexa.Rmd"
[1] "st_fullpath_noname:C:/Users/fan/Stat4Econ/summarystats"
[1] "spt_file:C:/Users/fan/Stat4Econ/summarystats/meansdhist.ipynb"
[1] "spt_file_full_rmd:C:/Users/fan/Stat4Econ/summarystats/meansdhist.Rmd"
[1] "st_fullpath_noname:C:/Users/fan/Stat4Econ/summarystats"
[1] "spt_file:C:/Users/fan/Stat4Econ/summarystats/toolboxone.ipynb"
[1] "spt_file_full_rmd:C:/Users/fan/Stat4Econ/summarystats/toolboxone.Rmd"
[1] "st_fullpath_noname:C:/Users/fan/Stat4Econ/survey"
[1] "spt_file:C:/Users/fan/Stat4Econ/survey/classsurvey.ipynb"
[1] "spt_file_full_rmd:C:/Users/fan/Stat4Econ/survey/classsurvey.Rmd"
The working directory was changed to C:/Users/fan/Stat4Econ/survey inside a notebook chunk. The working directory will be reset when the chunk is finished running. Use the knitr root.dir option in the setup chunk to change the working directory for notebook chunks.
LS0tDQp0aXRsZTogIkNvbnZlcnQgSnVweXRlciBGaWxlcyB0byBSTUQiDQpvdXRwdXQ6DQogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQNCiAgcGRmX2RvY3VtZW50Og0KICAgIGRmX3ByaW50OiBwYWdlZA0KICBodG1sX2RvY3VtZW50Og0KICAgIGRmX3ByaW50OiBwYWdlZA0KICB3b3JkX2RvY3VtZW50OiBkZWZhdWx0DQp1cmxjb2xvcjogYmx1ZQ0KYWx3YXlzX2FsbG93X2h0bWw6IHllcw0KLS0tDQoNCkJhY2sgdG8gW0Zhbl0oaHR0cHM6Ly9mYW53YW5nZWNvbi5naXRodWIuaW8pJ3MgW1JldXNhYmxlIFIgPUNvZGVdKGh0dHBzOi8vZmFud2FuZ2Vjb24uZ2l0aHViLmlvL1I0RWNvbi8pIHRhYmxlIG9mIGNvbnRlbnQuDQoNCmBgYHtyIEdsb2JhbE9wdGlvbnMsIGVjaG8gPSBULCByZXN1bHRzID0gJ2hpZGUnLCBtZXNzYWdlPUYsIHdhcm5pbmc9Rn0NCm9wdGlvbnMoa25pdHIuZHVwbGljYXRlLmxhYmVsID0gJ2FsbG93JykNCmBgYA0KYGBge3IgbG9hZGxpYiwgZWNobyA9IFQsIHJlc3VsdHMgPSAnaGlkZScsIG1lc3NhZ2U9Riwgd2FybmluZz1GfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KHRpZHlyKQ0KbGlicmFyeShybWFya2Rvd24pDQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeShrYWJsZUV4dHJhKQ0KIyBmaWxlIG5hbWUNCnN0X2ZpbGVfbmFtZSA9ICdmc19jb252ZXJ0X2p1cHl0ZXIycm1kJw0KIyBHZW5lcmF0ZSBSIEZpbGUNCnRyeShwdXJsKHBhc3RlMChzdF9maWxlX25hbWUsICIuUm1kIiksIG91dHB1dD1wYXN0ZTAoc3RfZmlsZV9uYW1lLCAiLlIiKSwgZG9jdW1lbnRhdGlvbiA9IDIpKQ0KIyBHZW5lcmF0ZSBQREYgYW5kIEhUTUwNCiMgcm1hcmtkb3duOjpyZW5kZXIoIkM6L1VzZXJzL2Zhbi9SNEVjb24vYW10by9hcnJheS9mc19tZXNoci5SbWQiLCAicGRmX2RvY3VtZW50IikNCiMgcm1hcmtkb3duOjpyZW5kZXIoIkM6L1VzZXJzL2Zhbi9SNEVjb24vYW10by9hcnJheS9mc19tZXNoci5SbWQiLCAiaHRtbF9kb2N1bWVudCIpDQpgYGANCg0KIyMgSnVweXRlciBGaWxlcyBhbmQgUk1EDQoNClJtYXJrZG93biBpbiBSc3R1ZGlvIGlzIGVhc2llciBmb3IgZGVidWdnaW5nLCBhbmQgYWxsb3dzIGZvciBlYXNpZXIgaW50ZXJhY3Rpb24gd2l0aCBjdXJyZW50IHdvcmtzcGFjZS4NCg0KIyMjIFNpbmdsZSBKdXB5dGVyIHRvIFJNRCBjb252ZXJzaW9uDQoNClJtYXJrZG93biBoYXMgYSBjb252ZXJzaW9uIHByb2dyYW06IFtjb252ZXJ0X2lweW5iXShodHRwczovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbS9kb2NzL3JlZmVyZW5jZS9jb252ZXJ0X2lweW5iLmh0bWwpLg0KDQpgYGB7cn0NCiMgR2VuZXJhdGUgUGF0aHMNCnNwdF9maWxlX3Jvb3QgPSAnQzovVXNlcnMvZmFuL1I0RWNvbi9zdW1tYXJpemUvc3VtbS8nDQpzcHRfZmlsZV9uYW1lID0gJ0J5R3JvdXBTdW1tT25lJw0Kc3B0X2ZpbGVfZnVsbF9pcHluYiA9IHBhc3RlMChzcHRfZmlsZV9yb290LCBzcHRfZmlsZV9uYW1lLCAnLmlweW5iJykNCnNwdF9maWxlX2Z1bGxfcm1kID0gcGFzdGUwKHNwdF9maWxlX3Jvb3QsIHNwdF9maWxlX25hbWUsICcucm1kJykNCg0KIyBDb252ZXJ0IGZyb20gSVBZTkIgdG8gUk1EDQpmaWxlX25iX3JtZCA9IHJtYXJrZG93bjo6OmNvbnZlcnRfaXB5bmIoc3B0X2ZpbGVfZnVsbF9pcHluYikNCnN0X25iX3JtZCA9IHhmdW46OmZpbGVfc3RyaW5nKGZpbGVfbmJfcm1kKQ0KDQojIFNhdmUgUk1EDQpmaWxlQ29ubiA8LSBmaWxlKHNwdF9maWxlX2Z1bGxfcm1kKQ0Kd3JpdGVMaW5lcyhzdF9uYl9ybWQsIGZpbGVDb25uKQ0KY2xvc2UoZmlsZUNvbm4pDQoNCiMgQ29udmVydCB0byBQREYgYW5kIEhUTUwNCiMgcm1hcmtkb3duOjpyZW5kZXIoc3B0X2ZpbGVfZnVsbF9ybWQsICJwZGZfZG9jdW1lbnQiKQ0KIyBybWFya2Rvd246OnJlbmRlcihzcHRfZmlsZV9mdWxsX3JtZCwgImh0bWxfZG9jdW1lbnQiKQ0KYGBgDQoNCiMjIyBNdWx0aXBsZSBKdXB5dGVyIHRvIFJNRCBjb252ZXJzaW9uDQoNClNlYXJjaCBpbiBmb2xkZXIgZm9yIGlweW5iIGZpbGVzLCBhbmQgdGhlbiBjb252ZXJ0IGNvbGxlY3RpdmVseSB0byBSbWQuDQoNCmBgYHtyfQ0KDQpzcHRfcm9vdCA8LSAnQzovVXNlcnMvZmFuL1N0YXQ0RWNvbi8nDQojIGlmIHRoZSBwYXRoIGNvbnRhaW5zIHRoZXNlIHNraXANCg0Kc3BuX3NraXAgPC0gYygnc3VtbWFyaXplJywgJ3BhbmVsJywgJ3N1cHBvcnQnKQ0Kc3BuX3NraXAgPC0gYygnJykNCg0KIyBHcm91cCBBDQpzcHRfZGVzYyA8LSBwYXN0ZTAoc3B0X3Jvb3QsICdkZXNjcmlwdGl2ZScpDQpzcHRfc3J2eSA8LSBwYXN0ZTAoc3B0X3Jvb3QsICdzdXJ2ZXknKQ0Kc3B0X3N1bW0gPC0gcGFzdGUwKHNwdF9yb290LCAnc3VtbWFyeXN0YXRzJykNCmxzX3BhdGhfZ3JvdXBfYSA8LSBjKHNwdF9kZXNjLCBzcHRfc3J2eSwgc3B0X3N1bW0pDQoNCiMgR3JvdXAgQg0Kc3B0X3Byb2IgPC0gcGFzdGUwKHNwdF9yb290LCAncHJvYmFiaWxpdHknKQ0Kc3B0X3BiY3QgPC0gcGFzdGUwKHNwdF9yb290LCAncHJvYmN0cycpDQpsc19wYXRoX2dyb3VwX2IgPC0gYyhzcHRfcHJvYiwgc3B0X3BiY3QpDQoNCiMgQWxsIGxzX3BhdGhfZ3JvdXBfdXNlDQpsc19wYXRoX2dyb3VwIDwtIGMobHNfcGF0aF9ncm91cF9hLCBsc19wYXRoX2dyb3VwX2IpDQoNCiMgR3JvdXAgVG8gVXNlDQpsc19wYXRoX2dyb3VwX3VzZSA8LSBsc19wYXRoX2dyb3VwDQojIGxzX3BhdGhfZ3JvdXBfdXNlIDwtIGxzX3BhdGhfZ3JvdXBfdGVtcA0KDQojIEdldCBQYXRoDQpsc19zZmxzIDwtIGxpc3QuZmlsZXMocGF0aD1sc19wYXRoX2dyb3VwX3VzZSwgcmVjdXJzaXZlPVQsIHBhdHRlcm49Ii5pcHluYiIsIGZ1bGwubmFtZXM9VCkNCg0KIyBFeGNsdWRlcyBlbGVtZW50cyBvZiBwYXRoIHRoYXQgaGF2ZSBleGNsdXNpb24gc3RyaW5ncw0KaWYgKHNwbl9za2lwICE9ICcnKSB7DQogIGxzX3NmbHMgPC0gbHNfc2Zsc1shZ3JlcGwocGFzdGUoc3BuX3NraXAsIGNvbGxhcHNlID0gInwiKSwgbHNfc2ZscyldDQp9DQoNCiMgcHJpbnQNCmZvciAoc3B0X2ZpbGUgaW4gbHNfc2Zscykgew0KICAjIDEuIENoZWNrIGlmIHRoZSBSTUQgZmlsZSBoYXMgYmVlbiBtb2RpZmllZCBvciBpcyBuZXcsIGlmIG5laXRoZXIsIGRvIG5vdCBnZW5lcmF0ZSBwZGYgaHRtbA0KICAjIDIuIHN0b3JlIHBkZiBhbmQgaHRtbCBmaWxlcyBpbiBhIHN1YmZvbGRlcg0KICAjIDMuIG1haW4gZm9sZGVyIGtlZXBzIG9ubHkgUm1kIGZpbGUNCiAgIyA0LiBkZWxldGUgdGV4IGFuZCBvdGhlciBmaWxlcw0KDQogICMgcHJpbnQocGFzdGUwKCdzcHRfZmlsZTonLCBzcHRfZmlsZSkpDQogIA0KICBzdF9mdWxscGF0aF9ub25hbWUgPC0gZGlybmFtZShzcHRfZmlsZSkNCiAgc3RfZnVsbHBhdGhfbm9zdWZ4IDwtIHN1YignXFwuaXB5bmIkJywgJycsIHNwdF9maWxlKQ0KICBzdF9maWxlX3dub19zdWZmaXggPC0gc3ViKCdcXC5pcHluYiQnLCAnJywgYmFzZW5hbWUoc3B0X2ZpbGUpKQ0KDQogIHNldHdkKHN0X2Z1bGxwYXRoX25vbmFtZSkNCiAgc3B0X2ZpbGVfZnVsbF9ybWQgPSBwYXN0ZTAoc3RfZnVsbHBhdGhfbm9zdWZ4LCAnLlJtZCcpDQoNCiAgcHJpbnQocGFzdGUwKCdzdF9mdWxscGF0aF9ub25hbWU6Jywgc3RfZnVsbHBhdGhfbm9uYW1lKSkNCiAgcHJpbnQocGFzdGUwKCdzcHRfZmlsZTonLCBzcHRfZmlsZSkpDQogIHByaW50KHBhc3RlMCgnc3B0X2ZpbGVfZnVsbF9ybWQ6Jywgc3B0X2ZpbGVfZnVsbF9ybWQpKQ0KICANCiAgIyBDb252ZXJ0IGZyb20gSVBZTkIgdG8gUk1EDQogIGZpbGVfbmJfcm1kID0gcm1hcmtkb3duOjo6Y29udmVydF9pcHluYihzcHRfZmlsZSkNCiAgc3RfbmJfcm1kID0geGZ1bjo6ZmlsZV9zdHJpbmcoZmlsZV9uYl9ybWQpDQoNCiAgIyBTYXZlIFJNRA0KICBmaWxlQ29ubiA8LSBmaWxlKHNwdF9maWxlX2Z1bGxfcm1kKQ0KICB3cml0ZUxpbmVzKHN0X25iX3JtZCwgZmlsZUNvbm4pDQogIGNsb3NlKGZpbGVDb25uKQ0KDQp9DQoNCg0KYGBgDQo=