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

Quarto渲染PDF时读取.csv文件报错:存在重复键值

解决Quarto渲染PDF时flextable处理data.table的笛卡尔积报错

问题原因

报错来自data.table的内部函数vecseq(),但你当前代码里没有显式执行join操作,推测是flextable在处理data.table对象时触发了内部关联逻辑,而你的csv数据中存在重复键值,触发了笛卡尔积限制。之前在dplyr join时加allow.cartesian=TRUE无效,因为问题出在读取后的表格渲染环节,而非生成csv时的join步骤。

解决方案

1. 将data.table转换为普通data.frame

flextable对base R的data.frame支持更稳定,转成data.frame后可绕开data.table的内部逻辑:

#| warning: false
#| echo: false
require(data.table)
require(flextable)
fread("data/table.csv") |> as.data.frame() |> flextable(cwidth = c(1, 1, 1, 4)) |> fontsize(size = 8)

2. 改用tidyverse的读取函数替代fread

完全避开data.table对象,用readr::read_csv读取数据:

#| warning: false
#| echo: false
require(readr)
require(flextable)
read_csv("data/table.csv") |> flextable(cwidth = c(1, 1, 1, 4)) |> fontsize(size = 8)

3. 检查并清理csv中的重复数据

如果数据中存在重复行,先去重再渲染:

#| warning: false
#| echo: false
require(data.table)
require(flextable)
fread("data/table.csv") |> unique() |> flextable(cwidth = c(1, 1, 1, 4)) |> fontsize(size = 8)

若需要确认重复情况,可临时运行以下代码查看重复行数:

fread("data/table.csv") |> duplicated() |> sum()

内容的提问来源于stack exchange,提问作者Nikki Yu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:27:18