Quarto导入CSV文件时触发vecseq()错误的排查求助
问题
尝试将MIMIC III数据库导出的CSV文件导入Quarto时持续报错,数据集可能存在重复值(如基于subject-ids的"FEMALE / MALE"重复项),曾尝试缩小数据集但未解决问题。
使用的代码
#| warning: false #| echo: false library(data.table) library(flextable) fread("mimic_admissions.csv") |> flextable(cwidth = c(1, 1, 1, 4)) |> fontsize(size = 8)
报错信息
Quitting from lines 84-89 [unnamed-chunk-3] (test2.qmd) Error in `vecseq()`: ! Join results in 836 rows; more than 285 = nrow(x)+nrow(i). Check for duplicate key values in i each of which join to the same group in x over and over again. If that's ok, try by=.EACHI to run j for each group to avoid the large allocation. If you are sure you wish to proceed, rerun with allow.cartesian=TRUE. Otherwise, please search for this error message in the FAQ, Wiki, Stack Overflow and data.table issue tracker for advice. Backtrace: 1. global .main() 2. execute(...) 3. rmarkdown::render(...) 4. knitr::knit(knit_input, knit_output, envir = envir, quiet = quiet) 5. knitr:::process_file(text, output) ... 27. flextable:::knit_to_latex(x, bookdown = is_bookdown, quarto = is_quarto) 28. flextable:::gen_raw_latex(...) 30. data.table::merge.data.table(...) 32. data.table:::`[.data.table`(...) 33. data.table:::vecseq(...)
错误原因分析
- 这个错误是data.table的笛卡尔积安全限制触发:从报错回溯可以看到,flextable在生成LaTeX格式输出时,内部调用了
data.table::merge.data.table()函数。你的数据中存在重复键值,导致合并操作产生了远超预期的笛卡尔积行数(836行远大于nrow(x)+nrow(i)=285),触发了data.table默认的行数上限限制。 - 数据集里的重复值是核心诱因:比如你提到的subject-ids关联的重复性别记录,在flextable内部处理数据时,合并操作会对这些重复键值进行全量匹配,进而生成大量冗余行,触发限制。
- 缩小数据集无效的原因:即使是子集数据里依然存在重复键值,只要重复键值未被清理,内部合并就会触发这个报错。
内容的提问来源于stack exchange,提问作者Nikki Yu
相关产品推荐
相关产品推荐

