R 4.3.2中save_kable()保存kableExtra表格为.png失败报错
在R 4.3.2中使用kableExtra保存表格为PNG报错的解决方案
问题背景
将kableExtra生成的HTML表格保存为.png格式时,旧版R可正常运行,但切换至R 4.3.2后出现正则表达式相关报错,已重装kableExtra和webshot2仍无法解决。
示例代码
library(kableExtra) df <- data.frame(x = c(1:10), y = c(11:20)) tab <- kbl(df) |> kable_classic() save_kable(tab, "tab.png")
报错信息
Warning: TRE pattern compilation error 'Invalid back reference'Error in sub(file, "", filename) :
invalid regular expression 'C:\Users\ECS155\AppData\Local\Temp\2\Rtmp0SBfQp\tab34a035bd7a3f.html', reason 'Invalid back reference'
完整调用回溯
Error in sub(file, "", filename) : invalid regular expression 'C:\Users\ECS155\AppData\Local\Temp\2\Rtmp0SBfQp\tab34a035bd7a3f.html', reason 'Invalid back reference' 7. sub(file, "", filename) 6. file_url(x) 5. FUN(X[[i]], ...) 4. vapply(url, function(x) { if (!is_url(x)) { file_url(x) } ... 3. webshot2::webshot(file_temp_html, file, ...) 2. save_kable_html(x, file, bs_theme, self_contained, extra_dependencies, density, ...) 1. save_kable(tab, "tab.png")
解决方法
报错根源是Windows系统路径中的反斜杠\被sub()函数当作正则表达式的转义字符处理,导致解析失败。可通过以下两种方式修复:
方法1:重写file_url函数
在R控制台运行以下代码,替换webshot2包中存在问题的file_url函数:
file_url <- function(x) { if (grepl("^[a-zA-Z]+://", x)) { return(x) } x <- normalizePath(x, winslash = "/", mustWork = FALSE) if (.Platform$OS.type == "windows") { x <- paste0("file:///", gsub("\\\\", "/", x)) } else { x <- paste0("file://", x) } x }
完成后重新执行你的表格保存代码即可正常生成PNG文件。
方法2:修改file_url的正则匹配逻辑
使用trace()函数编辑webshot2内部的file_url函数,强制sub()按字面匹配字符串:
trace(webshot2:::file_url, edit = TRUE)
在弹出的编辑器中找到这一行:
sub(file, "", filename)
修改为:
sub(file, "", filename, fixed = TRUE)
保存并退出编辑器后,重新运行代码即可解决问题。
内容的提问来源于stack exchange,提问作者Ned
相关产品推荐
相关产品推荐

