Rgitbook icon indicating copy to clipboard operation
Rgitbook copied to clipboard

cannot generate .Rmd files

Open aaplab1 opened this issue 11 years ago • 1 comments

When I do the initGitbook() command I get the following error and no .Rmd files are created.

Error in if (grepl("r knitsetup.+\n", lines)) { : 
argument is of length zero

aaplab1 avatar May 01 '14 03:05 aaplab1

Yes, I found the same error, I've submitted a pull request that fixes it for me. If I replace the initGitbook function with the code below, then it works fine.

dir = getwd()
dir <- normalizePath(dir)
checkForGitbook(quiet = TRUE)
oldwd <- setwd(dir)
test <- system(paste0("gitbook init ", dir))
if (test != 0) {
  stop("gitbook initalization failed")
}
mdfiles <- list.files(dir, "*.md", recursive = TRUE, full.names = TRUE)
mdfiles <- mdfiles[-c(grep("README.md$", mdfiles), grep("SUMMARY.md$", mdfiles))]
mdfiles2 <- gsub("\\.md$", ".Rmd", mdfiles)
file.rename(mdfiles, mdfiles2)
knitr.header <- c("```{r knitsetup, echo=FALSE, results='hide', warning=FALSE, message=FALSE, cache=FALSE}", 
                  "opts_knit$set(base.dir='./', fig.path='', out.format='md')", 
                  "opts_chunk$set(prompt=TRUE, comment='', results='markup')", 
                  "# See yihui.name/knitr/options for more Knitr options.", 
                  "##### Put other setup R code here", "", "",
                  "# end setup chunk",
                  "```")

for (rmd in mdfiles2) {
  print(rmd)
  file <- file(rmd)
  lines <- readLines(file)
  close(file)
  # don't inject knitr setup chunk if Rmd file 
  # already has one, ie. editing an existing Rmd
  # or the references Rmd, which has a different setup
  toMatch <- c("r knitsetup", "r setup")
  matches <- grepl(paste(toMatch,collapse="|"), lines)  
  suppressWarnings(if (!any(matches)) {
    lines <- c(knitr.header, lines)
  })
  file <- file(rmd)
  writeLines(lines, file(rmd))
  close(file)
}
setwd(oldwd)
invisible()

benmarwick avatar May 12 '14 05:05 benmarwick