Ошибка при использовании пакета R flextable — не удается загрузить временный файл изображения

Я пытаюсь сохранить фрейм данных в виде файла изображения, используя flextable, с конечной целью построить его рядом с объектом ggplot. Вот пример кода:

library(flextable)
ft <- flextable( head( mtcars ) )
ft <- autofit(ft)
tf <- tempfile(fileext = ".png")
save_as_image(ft, tf)

который возвращает следующую ошибку:

Could not load  file:///D:/Antonis/Documents/file:/C:/Users/Antonis/AppData/Local/Temp/RtmpmgSSYv/file2510dc77c47.html
Error in webshot::webshot(url = sprintf("file://%s", tf), file = path,  : 
  webshot.js returned failure value: 1
In addition: Warning message:
In normalizePath(path.expand(path), winslash, mustWork) :
  path[1]="file://C:\Users\Antonis\AppData\Local\Temp\RtmpmgSSYv\file2510dc77c47.html": The filename, directory name, or volume label syntax is incorrect

Кажется, что путь к файлу неверен. Я попытался изменить рабочий каталог с помощью setwd:

setwd("C:/Users/Antonis/AppData/Local/Temp/RtmpmgSSYv")

но ошибка сохраняется:

Could not load  file:///C:/Users/Antonis/AppData/Local/Temp/RtmpmgSSYv/file:/C:/Users/Antonis/AppData/Local/Temp/RtmpmgSSYv/file25105e4f2c8b.html
Error in webshot::webshot(url = sprintf("file://%s", tf), file = path,  : 
  webshot.js returned failure value: 1
In addition: Warning message:
In normalizePath(path.expand(path), winslash, mustWork) :
  path[1]="file://C:\Users\Antonis\AppData\Local\Temp\RtmpmgSSYv\file25105e4f2c8b.html": The filename, directory name, or volume label syntax is incorrect

То же самое происходит, когда я пытаюсь установить путь через команду tempfile:

tf <- tempfile(tmpdir = "C:/Users/Antonis/AppData/Local/Temp/RtmpmgSSYv", fileext = ".png")

Файл справки save_as_image также не предлагает никакой информации.

Приведенный выше код довольно общий и фактически взят из сообщения в блоге, поэтому моя проблема кажется локальной. Какие-либо предложения?


person Ant    schedule 28.05.2019    source источник
comment
Есть ошибка с версией Windows (file:/// неверная...) Я скоро это исправлю   -  person David Gohel    schedule 28.05.2019


Ответы (1)


Не уверен насчет flextable, но в качестве альтернативы можно использовать tableHTML. Вы можете указать файл для локального сохранения или он будет автоматически сохранен во временном файле.

library(tableHTML)
mtcars %>%
 head() %>%
 tableHTML() %>%
 add_theme('scientific') %>%
 tableHTML_to_image()

Выход:

введите здесь описание изображения

person LyzandeR    schedule 28.05.2019
comment
Спасибо, это действительно работает. Я думаю, это другой вопрос, но: есть ли способ объединить ваш вывод html с другим ggplot (например, в flextable)? - person Ant; 28.05.2019
comment
Рад помочь. Нет, в настоящее время он недоступен, но определенно есть что добавить. Я добавлю его на github в качестве новой функции. - person LyzandeR; 28.05.2019
comment
Зависит от того, как вы хотите объединить их в HTML. Это на веб-сайте, блестящем, rmarkdown? Кстати, по вашему предыдущему вопросу я подумал, что вы можете указать файл для сохранения tableHTML (аргумент file в tableHTML_to_image). Затем прочитайте его как растр с помощью png::readPNG, а затем добавьте его в функцию cowplot::plot_grid. Это должно работать, и вы можете комбинировать оба. - person LyzandeR; 28.05.2019
comment
Действительно работает, спасибо! На самом деле он работает даже без чтения растра. После сохранения файла изображения вы можете использовать ggdraw() + draw_image(), чтобы сохранить сохраненное изображение в качестве второго графика, а затем объединить их с помощью plot_grid(). - person Ant; 28.05.2019