Arhn - архитектура программирования

Цикл через данные с помощью входного файла Rmd с изменяемыми результатами приводит к ошибке версии pandoc - но отлично работает без цикла?

Я пытаюсь создать много текстовых документов с помощью цикла и RMarkdown. Я использую flextable, чтобы сделать таблицы с приемлемым форматированием для отчета. Все работает нормально, пока я не попытаюсь просмотреть набор данных в цикле. Затем я получаю сообщение об ошибке версии pandoc:

Ошибка в knit_print.flextable (x, ...): версия pandoc> = 2.0, необходимая для рендеринга с флешированием в docx "

Однако, похоже, я скачал версию 2.1 19 января ...

pandoc_version () [1] ‘1.19.2.1’

Не говоря уже о том, что он отлично работает без цикла, когда я просто запускаю его в файле rmd. (Я бы подумал, что это не сработает, если бы версия была неправильной).

Я также пробовал sys.setenv ()

Sys.setenv("RSTUDIO_PANDOC" = "PATH TO PANDOC BIN")

Но все же это работает только для файла Rmd, но я получаю ту же ошибку о версии, когда пытаюсь зациклить ее. Опять же, я чувствую, что это не сработало бы в файле rmd, если бы это было неправильно.

Ниже я привожу воспроизводимый пример. Если я могу предоставить другую информацию, пожалуйста, дайте мне знать. Спасибо!

Мой цикл / сценарий R

DAT<-dplyr::sample_n(iris, 10)

Sys.setenv("RSTUDIO_PANDOC" = "PATH TO PANDOC BIN")
for (i in 1:nrow(DAT)){
   rmarkdown::render(input = "Loop Testing R Markdown.Rmd",
                    output_format = "word_document",
                    output_file = paste("Documents", i, ".docx", sep=''),
                    output_dir = "Documents/")
   }

> sessionInfo()
R version 3.4.3 (2017-11-30)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          

[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] rmarkdown_1.8    knitr_1.17       bindrcpp_0.2     dplyr_0.7.4      
qsurvey_0.0.3    installr_0.19.0 
 [7] stringr_1.2.0    officer_0.2.1    flextable_0.4.2  pander_0.6.1     
 kableExtra_0.7.0

loaded via a namespace (and not attached):
 [1] zip_1.0.0           Rcpp_0.12.14        bindr_0.1           
pillar_1.0.1        compiler_3.4.3     
 [6] plyr_1.8.4          highr_0.6           R.methodsS3_1.7.1   
R.utils_2.6.0       base64enc_0.1-3    
[11] tools_3.4.3         digest_0.6.13       uuid_0.1-2          lubridate_1.7.1     jsonlite_1.5       
[16] evaluate_0.10.1     tibble_1.4.1        viridisLite_0.2.0   pkgconfig_2.0.1     rlang_0.1.6        
[21] shiny_1.0.5         curl_3.1            yaml_2.1.16         httr_1.3.1          xml2_1.1.1         
[26] htmlwidgets_0.9     gdtools_0.1.6       hms_0.4.0           DT_0.2              rprojroot_1.3-1    
[31] glue_1.2.0          data.table_1.10.4-3 R6_2.2.2            readr_1.1.1         magrittr_1.5       
[36] backports_1.1.2     scales_0.5.0        htmltools_0.3.6     assertthat_0.2.0    rvest_0.3.2        
[41] xtable_1.8-2        mime_0.5            colorspace_1.3-2    httpuv_1.3.5        stringi_1.1.6      
[46] visNetwork_2.0.2    munsell_0.4.3       R.oo_1.21.0        
> pandoc_version()
[1] ‘1.19.2.1’
> 

Справочный файл Rmd

---
output:
 word_document: 
   reference_docx: mystyles.docx

---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)

```

 ```{r results='asis', include=FALSE}
## Load Packages
library(knitr)
library(rmarkdown)
library(dplyr)

```

```{r results="asis"}

#DAT<-iris # I comment this out when I run the loop, but leave it in when testing the format. 

library(pander)
panderOptions('knitr.auto.asis', FALSE)

First_N<-DAT[[i,1]]
  Last_N<-DAT[[i,2]]
    Name<-c(First_N, " ", Last_N)
      Name<-paste(Name, collapse = "")

cat("# ", Name, "\n")

```



## Title of Report Section
```{r, demo1, include=FALSE}
library(pander)
panderOptions('knitr.auto.asis', FALSE)

DemoTbl_1<-matrix(nrow = 2, ncol = 4)

DemoTbl_1[[1,1]]<- "Name:"
  DemoTbl_1[[1,2]]<- Name 
    DemoTbl_1[[1,3]]<- "State:"  
      DemoTbl_1[[1,4]]<-DAT[[i,3]] 

DemoTbl_1[[2,1]]<- "Other Feild Title:"  
  DemoTbl_1[[2,2]]<-DAT[[i,4]]  
    DemoTbl_1[[2,4]]<-DAT[[i,5]]  
      DemoTbl_1[[2,3]]<- "Pther Feild Title"

library("flextable")            
library("officer")

myft<-regulartable(as.data.frame(DemoTbl_1))
  myft <- bg(myft, bg = "#000000", j=1)
    myft <- color(myft, color = "#ffffff", j=1)
      myft <- border(myft, border = fp_border(color = "#000000"), part = "all")
        myft <- align( myft, align = "center", part = "all" )
          myft <- width(myft, width = 1.5, j=1) 
            myft <- width(myft, width = 3, j=2) 
              myft <- width(myft, width = 1.5, j=3)
                myft <- width(myft, width = 1.25, j=4)
                  myft<- delete_part(myft, part = "header")
                      myft <- bg(myft, bg = "#000000", j=3)
                        myft <- color(myft, color = "#ffffff", j=3)

```


```{r,  results='asis', echo=FALSE}
   #DemoTbl_1 # This prints fine
  myft ## This seems to be giving me the error "uitting from lines 77-78 
(Loop_Testing_R_Markdown.Rmd) Error in knit_print.flextable(x, ...) : pandoc 
version >= 2.0 required for flextable rendering in docx "
```

** Также - в случае, если это полезно, вот трассировка: **

  Error in knit_print.flextable(x, ...) : 
  pandoc version >= 2.0 required for flextable rendering in docx 
20.  stop("pandoc version >= 2.0 required for flextable rendering in docx") 
19.   knit_print.flextable(x, ...) 
18.   knit_print(x, ...) 
17.   withVisible(knit_print(x, ...)) 
16.   fun(x, options = options) 
15.   value_fun(ev$value, ev$visible) 
14.    withVisible(value_fun(ev$value, ev$visible)) 
13    .withCallingHandlers(withVisible(value_fun(ev$value, ev$visible)), 
warning = wHandler, error = eHandler, message = mHandler) 
12.    handle(pv <- withCallingHandlers(withVisible(value_fun(ev$value, 
ev$visible)), warning = wHandler, error = eHandler, message = mHandler)) 
11.    evaluate_call(expr, parsed$src[[i]], envir = envir, enclos = enclos, 
debug = debug, last = i == length(out), use_try = stop_on_error != 
    2L, keep_warning = keep_warning, keep_message = keep_message, 
output_handler = output_handler, include_timing = include_timing) 
10.    evaluate(code, envir = env, new_device = FALSE, keep_warning = !isFALSE(options$warning), 
keep_message = !isFALSE(options$message), stop_on_error = if (options$error && 
    options$include) 0L else 2L, output_handler = knit_handlers(options$render, 
    options)) 
9.    in_dir(input_dir(), evaluate(code, envir = env, new_device = FALSE, 
keep_warning = !isFALSE(options$warning), keep_message = !isFALSE(options$message), 
stop_on_error = if (options$error && options$include) 0L else 2L, 
output_handler = knit_handlers(options$render, options))) 
8.  block_exec(params) 
7. call_block(x) 
6. process_group.block(group) 
5. process_group(group) 
4. withCallingHandlers(if (tangle) process_tangle(group) else process_group(group), 
error = function(e) {
    setwd(wd)
    cat(res, sep = "\n", file = output %n% "") ... 
3. process_file(text, output) 
2. knitr::knit(knit_input, knit_output, envir = envir, quiet = quiet, 
encoding = encoding) 
1. rmarkdown::render(input = "Loop Testing R Markdown.Rmd", output_format = "word_document", 
output_file = paste("Documents", i, ".docx", sep = ""), output_dir = "Documents/") 

  • Вы можете попробовать добавить Sys.setenv("RSTUDIO_PANDOC" = "PATH TO PANDOC BIN") в свой Rmd файл? 23.01.2018
  • Спасибо, Дэвид. Я удалил и переустановил pandoc - я думал, что получил самую последнюю версию на прошлой неделе с установщиком, но я думаю, что это не так. Мне также пришлось настроить sys.setenv () туда, где я загрузил самую последнюю версию pandoc. (ссылаясь на RStuido / bin / pandoc, как будто я изначально отбросил новую ошибку). 23.01.2018
  • rmarkdown запускает новый сеанс при рендеринге, я думаю, что var RSTUDIO_PANDOC просто не передается в новый сеанс. 23.01.2018
  • Кажется, он работает с RSTUDIO_PANDOC, установленным в мою папку загрузок в скрипте (а не в rmd - хотя я могу установить его и в файле Rmd, чтобы быть в безопасности) ... Я также вручную загрузил pandoc в своих попытках устранения неполадок. Я полностью понимаю, что ссылка на мою папку загрузок - ужасная идея для долгосрочного решения, и переместит ее. Но теперь это работает! 23.01.2018
  • @DavidGohel Итак, день спустя у меня снова та же ошибка. Я добавил RSTUDIO- 24.01.2018

Ответы:


1

Вам необходимо создать файл .Rprofile в корне вашего проекта R (см. ?Startup). В этом файле добавьте свою инструкцию R, чтобы установить путь к pandoc (Sys.setenv("RSTUDIO_PANDOC" = "PATH TO PANDOC BIN")).

rmarkdown :: render использует новый сеанс R, и ваша переменная не установлена ​​при рендеринге.

24.01.2018
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..