1) Я попробовал это для пакета, который я разрабатывал, и это было не просто. В итоге мне понадобились две библиотеки: rsvg
и grImport2
. Вот код, который я использовал:
tfile <- tempfile(fileext = ".svg")
tfile2 <- tempfile(fileext = ".png")
cat(svg_code, file=tfile)
if (requireNamespace("rsvg", quietly = TRUE) && requireNamespace("grImport2", quietly = TRUE)) {
rsvg::rsvg_svg(svg = tfile, tfile2)
p <- grImport2::readPicture(tfile2)
grImport2::grid.picture(p)
} else {
if (systemShow == FALSE && outFile == ''){
warning("The figure cannot be rendered in the plot window. Please, use the arguments outFile and/or systemShow.")
}
}
if (systemShow){
utils::browseURL(tfile)
}
Первое условие - в случае, если система не позволяет установить ни один из пакетов. Как видите, сначала нужно записать код svg (svg_code
) в файл, в данном случае временный (tfile
). Затем rsvg_svg
записывает временный файл png (tfile2
). Наконец, grImport2::readPicture
и grImport2::grid.picture
показывают преобразованный файл в окне графика. Я также оставил часть, в которой пользователь может установить логическую переменную (systemShow
), и пакет попытается открыть файл в системном средстве просмотра svg по умолчанию.
2) Это гораздо проще. Вам просто нужно записать код в файл в виде текста, например cat(svg_code, file='path_to_file.svg')
.