You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 03:35:27