R markdown to html через knitr + pandoc: ошибка 137

У меня следующая проблема: у меня есть файл .Rmd, который я компилирую в html с помощью knitr + pandoc с помощью кнопки Rstudio. В этом файле .Rmd я передаю данные json на уровень js, следуя методу, описанному здесь: http://livefreeordichotomize.com/2017/01/24/custom-javascript-visualizations-in-rmarkdown/

Это потому, что я хочу использовать данные для некоторых настраиваемых визуальных элементов d3. Кажется, это хорошо работает для скромных объемов данных, однако, когда я пытаюсь передать большие данные, у меня возникают проблемы с компиляцией из .Rmd в html; проблема, похоже, связана с pandoc, поскольку я получаю:

pandoc document conversion failed with error 137

Я безуспешно пытался поискать в Интернете объяснение этого сообщения об ошибке. Кто-нибудь знает, что означает эта ошибка?

Не то же сообщение об ошибке, но может быть полезно: stackoverflow.com/questions/34687030/…

Stedy 19.07.2018 00:00

Вероятно, это ошибка нехватки памяти. См. stackoverflow.com/questions/1041182/….

HappyFace 16.07.2019 16:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
2
2 398
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После исследования ошибки я все еще не могу ее исправить. Однако у меня есть обходной путь, который позволяет вставлять произвольные данные json в отчет html, созданный с помощью R markdown, вообще без использования pandoc; последний, похоже, не любит инъекцию большого количества json, например, метод, описанный в

http://livefreeordichotomize.com/2017/01/24/custom-javascript-visualizations-in-rmarkdown/

поскольку эта ошибка 137 кажется мне связанной с pandoc, убивающим процесс преобразования в html, поскольку для завершения требуется много времени.

Обходной путь довольно прост: вместо того, чтобы вводить данные json на этапе компиляции knitr, включая их в блок с параметром asis (как описано в приведенной выше ссылке), лучше добавить данные json в конец в html-файле, который создается компиляцией с помощью knitr и pandoc. Другими словами, вставьте данные json в выходной html-файл шагов kitr + pandoc.

Предполагая, что файл rmd, который должен быть скомпилирован в html, находится в установленном пакете, и следуя предложениям на

Лучшая практика для встраивания произвольного JSON в DOM?

для встраивания данных json в DOM можно достичь этой цели, используя пакет xml2 с такой функцией, как:

create_report <- function(file, 
                          subdir, 
                          package, 
                          parameters, 
                          output_file, 
                          data_arr = NULL){
  #check file exists
  if (system.file(package = package, subdir, file) == ''){
    stop('Cannot find the .rmd file')
  }
  #first generate report
  address <- rmarkdown::render(system.file(package = package,
                                       subdir,
                                       file),
                           output_dir = getwd(),
                           intermediates_dir = getwd(),
                           output_file = output_file,
                           params = parameters,
                           clean = FALSE)
  #then append the data in the json files located in the named list
  #data_arr directly into the 
  #html after compilation if needed:
  if (!is.null(data_arr)){
  report <- xml2::read_html(address)
  report_body <- xml2::xml_find_first(report, "body")
  #adding the data
  for (i in 1:length(data_arr)){
    xml2::xml_add_child(report_body, "script", type = 'application/json', id = 
  names(data_arr[i]), data_arr[[i]])
  }
  #Then add a script that takes the data from the script tags added above and 
  #initializes the variables.
  varnames <- paste0("var ", names(data_arr), " = 
  JSON.parse(document.getElementById('", names(data_arr), "').innerHTML);",
                   collapse = " ")
  xml2::xml_add_child(report_body, "script", type = 'text/javascript', id = 
  'external_json_init', varnames)
  xml2::write_html(report, address)
}
return(address)
}

В приведенной выше функции data_arr должен быть именованным списком, элементы которого представляют собой строки json, полученные, например, путем преобразования объектов R с использованием jsonlite :: toJSON, и чьи имена являются именами переменных, которые будут использоваться для хранения данных на уровне javascript. . Таким образом, json произвольного размера может быть вставлен в HTML-код, сгенерированный R markdown, для обработки с помощью javascript.

Другие вопросы по теме