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
相关产品推荐
相关产品推荐

