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

R Markdown knit转HTML时出现data.frame替换行数不匹配错误的求助

R Markdown knit转HTML时出现data.frame替换行数不匹配错误的求助

我现在遇到一个棘手的问题:我用knitr把R Markdown文件转成HTML的时候,总是卡在一段代码上。这段代码的逻辑是用dplyr过滤主数据集REDCapTab,然后新建一个叫gestage的数据框(1列,10768行),接着把原数据集中16列的内容堆叠到这个新列里——每列有673行,16*673刚好是10768行。之后我把这个列转成有三个水平的因子,再生成条形图。

这段代码在控制台跑完全没问题,条形图也能正常生成,但一knit成HTML就报错。下面是出错的代码块:

x <- REDCapTab %>% 
  filter(PTDbloods != 0 & (AllPTDhx == 1 | AllPTDhx == 4))
gestage <- data.frame(new_column = rep(NA, 10768))
gestage$new_column <- c(x$p1wk09, x$p2wk09, x$p3wk09, x$p4wk09, x$p5wk09, x$p6wk09, x$p7wk09, x$p8wk09, x$p9wk09, x$p10wk09, x$p11wk09, x$p12wk09, x$p13wk09, x$p14wk09, x$p15wk09, x$p16wk09)
gestage$new_column <- factor(gestage$new_column, levels = c("20-27 weeks", "28-31 weeks", "32-36 weeks"))

gest_age_sPTL <- barplot(table(gestage$new_column),
                    xlab = "Gestational Age",
                    ylab = "Frequency (#)",
                    ylim = c(0, 600),
                    col = "darkslategray2",
                    main = md("Gestational Age Distribution for Pure sPTL Cases (n = 673)"))
rm(list = c("gestage", "gest_age_sPTL", "x"))

报错信息如下:

processing file: NHS2CaseSelection.Rmd
                                                                                                                                       

Quitting from lines 584-597 [gest_age_pPROM] (NHS2CaseSelection.Rmd)
Error in `$<-.data.frame`:
! replacement has 0 rows, data has 5712
Backtrace:
 1. base::`$<-`(`*tmp*`, new_column, value = `<chr>`)
 2. base::`$<-.data.frame`(`*tmp*`, new_column, value = `<chr>`)
Execution halted

我觉得特别奇怪的是,控制台跑这段代码完全没毛病,只有knit的时候会出错。而且紧挨着这段代码前面有一段逻辑几乎一样的代码,knit的时候完全没报错,那段代码如下:

x <- filter(REDCapTab, PTDbloods != 0)
gestage <- data.frame(new_column = rep(NA, 40688))
gestage$new_column <- c(x$p1wk09, x$p2wk09, x$p3wk09, x$p4wk09, x$p5wk09, x$p6wk09, x$p7wk09, x$p8wk09, x$p9wk09, x$p10wk09, x$p11wk09, x$p12wk09, x$p13wk09, x$p14wk09, x$p15wk09, x$p16wk09)
gestage$new_column <- factor(gestage$new_column, levels = c("20-27 weeks", "28-31 weeks", "32-36 weeks"))

gest_age <- barplot(table(gestage$new_column),
        xlab = "Gestational Age",
        ylab = "Frequency (#)",
        ylim = c(0, 3000),
        col = "darkslategray2",
        main = "Gestational Age Distribution of Preterm Delivery Cases")
rm(list = c("gestage", "gest_age", "x"))

到目前为止,我试过好几种方法创建gestage数据框:比如先用rep生成向量再转成数据框,或者用as.data.frame处理向量,甚至用序列来构建,但不管哪种方法,控制台跑都没问题,一knit就报同样的错。

麻烦大家帮忙看看问题出在哪,谢谢!

备注:内容来源于stack exchange,提问作者Kevin Sanchez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 12:14:33