2017-02-14 1 views
1

У меня проблема, подобная проблеме, поднятой в 'R, knitr doesn't respect order of chunks and text'. В моем коде у меня есть текстовый заголовок, за которым следует кусок, который использует четыре вызова функции knitr :: kable для отображения четырех таблиц. Странно, что таблицы 1 и таблица 2 отображаются выше заголовка, а таблицы 3 и 4 ниже - в формате PDF. Похоже, что это связано с knitr, позволяющим объектам плавать. Могу ли я отключить это, предпочтительно, в функции knitr :: kable или в вариантах куска? Вот мой код:Как управлять порядком вывода из файла rmarkdown/knitr (или как предотвратить поплавок)

--- 
title: "Reproducible Error" 
author: "Rex Macey" 
date: "February 14, 2017" 
output: pdf_document 
header-includes: 
- \usepackage{placeins} 
--- 

```{r setup, include=FALSE} 
knitr::opts_chunk$set(echo = TRUE) 
``` 

\newpage 

# Section 1 
```{r CompTables, echo=FALSE, warning=FALSE, results='asis', out.extra='FloatBarrier'} 
comptables1<-matrix(rep(c(100,200,300,400,500),3),nrow=5,ncol=3) 
colnames(comptables1)<-c("Conservative","Moderate","Aggressive") 
row.names(comptables1)<-c("5th %-tile","25th %-tile","50th %-tile","75th %-tile","95th %-tile") 
comptables2<-matrix(0,nrow=6,ncol=3) 
comptables2[1,]<-comptables1[1,] 
for (i in 2:5){ 
    comptables2[i,]<-comptables1[i,]-comptables1[i-1,] 
} 
comptables<-list() 
comptables[[1]]<-list(comptables1,comptables2) 
comptables[[2]]<-list(comptables1,comptables2) 
comptables[[3]]<-list(comptables1,comptables2) 
comptables[[4]]<-list(comptables1,comptables2) 

knitr::kable(comptables[[1]][1], 
     caption="Table of Forecast Wealth Values: Suggested One Year", 
     format.args=list(big.mark=",",floating=FALSE)) 

knitr::kable(comptables[[2]][1], 
     caption="Table of Forecast Wealth Values: Suggested Three Years", 
     format.args=list(big.mark=",",floating=FALSE)) 

knitr::kable(comptables[[3]][1], 
     caption="Table of Forecast Wealth Values: Suggested Five Years", 
     format.args=list(big.mark=",",floating=FALSE)) 

knitr::kable(comptables[[4]][1], 
     caption="Table of Forecast Wealth Values: Suggested Ten Years", 
     format.args=list(big.mark=",",floating=FALSE)) 
``` 


```{r CompChart, echo=FALSE, warning=FALSE, fig.height=4, fig.show='hold', results='asis'} 
horizons <- c(1,3,5,10) 
par(mfrow=c(1,2)) 
minv<-min(unlist(comptables[[1]][1]),unlist(comptables[[2]][1]), 
      unlist(comptables[[3]][1]),unlist(comptables[[4]][1])) 
maxv<-max(unlist(comptables[[1]][1]),unlist(comptables[[2]][1]), 
      unlist(comptables[[3]][1]),unlist(comptables[[4]][1])) 
for (h in 1:length(horizons)){ 
    wealth.pl.comp<-matrix(unlist(comptables[[h]][2],use.names = FALSE),ncol=3,byrow=FALSE) 
    colnames(wealth.pl.comp)<-c("Cons.","Mod.","Aggr.") 
    barplot(wealth.pl.comp,col=c("white","red","yellow","green","blue"),border=NA, 
     main=paste("Forecast A/T Values -",horizons[h],"Years"), 
     ylim=c(minv/2,maxv+minv/2)) 
    abline(h=250,col="darkgray") 
} 
par(mfrow=c(1,1)) 
``` 


\newpage  

#Section 2 

Я экспериментировал с плавающей = FALSE опции в функции KABLE и fig.show и результатов параметров (включая результаты = «трюм») в опциях куска. Новая страница перед Разделом 1 также не соответствует порядку. Заметьте, я тоже проверил this seemingly similar question.

Вот изображение выхода. Текст из одного показанного фрагмента не работает, потому что две таблицы находятся над текстовым заголовком «Раздел 1». Диаграмма между таблицами из следующего фрагмента.

Image of Output

+0

Я обычно включаю '\ usepackage {placeins}' в моем заголовке, а затем место '\ FloatBarrier' перед заголовком раздела, чтобы предотвратить плавающие среды от пересечения вне секции я хочу их. – Benjamin

+0

я добавил заголовок' - включает в себя: - \ usepackage {placeins} 'и модифицировал заголовки кусков, чтобы они выглядели следующим образом:' {r, echo = FALSE, warning = FALSE, results = 'asis', out.extra = 'FloatBarrier'} ' за комментарий @Benjamin. У меня все еще такая же проблема. Что мне делать по-другому? – rmacey

+0

Если вы предоставите воспроизводимый пример, будет легче сделать конкретную рекомендацию. – Benjamin

ответ

1

Основываясь на documentation, out.extra обеспечивает "дополнительные опции для фигур."

Когда я размещаю \FloatBarrier над куском вместо того, чтобы использовать out.extra, я получаю что-то более похожее на то, что, как я считаю, вы хотите.

--- 
title: "Reproducible Error" 
author: "Rex Macey" 
date: "February 14, 2017" 
output: pdf_document 
header-includes: 
- \usepackage{placeins} 
--- 

```{r setup, include=FALSE} 
knitr::opts_chunk$set(echo = TRUE) 
``` 

\newpage 

\FloatBarrier 

# Section 1 
```{r CompTables, echo=FALSE, warning=FALSE, results='asis'} 
comptables1<-matrix(rep(c(100,200,300,400,500),3),nrow=5,ncol=3) 
colnames(comptables1)<-c("Conservative","Moderate","Aggressive") 
row.names(comptables1)<-c("5th %-tile","25th %-tile","50th %-tile","75th %-tile","95th %-tile") 
comptables2<-matrix(0,nrow=6,ncol=3) 
comptables2[1,]<-comptables1[1,] 
for (i in 2:5){ 
    comptables2[i,]<-comptables1[i,]-comptables1[i-1,] 
} 
comptables<-list() 
comptables[[1]]<-list(comptables1,comptables2) 
comptables[[2]]<-list(comptables1,comptables2) 
comptables[[3]]<-list(comptables1,comptables2) 
comptables[[4]]<-list(comptables1,comptables2) 

knitr::kable(comptables[[1]][1], 
     caption="Table of Forecast Wealth Values: Suggested One Year", 
     format.args=list(big.mark=",",floating=FALSE)) 

knitr::kable(comptables[[2]][1], 
     caption="Table of Forecast Wealth Values: Suggested Three Years", 
     format.args=list(big.mark=",",floating=FALSE)) 

knitr::kable(comptables[[3]][1], 
     caption="Table of Forecast Wealth Values: Suggested Five Years", 
     format.args=list(big.mark=",",floating=FALSE)) 

knitr::kable(comptables[[4]][1], 
     caption="Table of Forecast Wealth Values: Suggested Ten Years", 
     format.args=list(big.mark=",",floating=FALSE)) 
``` 


```{r CompChart, echo=FALSE, warning=FALSE, fig.height=4, fig.show='hold', results='asis'} 
horizons <- c(1,3,5,10) 
par(mfrow=c(1,2)) 
minv<-min(unlist(comptables[[1]][1]),unlist(comptables[[2]][1]), 
      unlist(comptables[[3]][1]),unlist(comptables[[4]][1])) 
maxv<-max(unlist(comptables[[1]][1]),unlist(comptables[[2]][1]), 
      unlist(comptables[[3]][1]),unlist(comptables[[4]][1])) 
for (h in 1:length(horizons)){ 
    wealth.pl.comp<-matrix(unlist(comptables[[h]][2],use.names = FALSE),ncol=3,byrow=FALSE) 
    colnames(wealth.pl.comp)<-c("Cons.","Mod.","Aggr.") 
    barplot(wealth.pl.comp,col=c("white","red","yellow","green","blue"),border=NA, 
     main=paste("Forecast A/T Values -",horizons[h],"Years"), 
     ylim=c(minv/2,maxv+minv/2)) 
    abline(h=250,col="darkgray") 
} 
par(mfrow=c(1,1)) 
``` 


\newpage  

#Section 2 
+0

Спасибо за вашу помощь. Я боюсь вашей скорости ответа. Ваше предложение действительно производит что-то другое. Я надеялся на 4 таблицы, за которыми следуют 4 диаграммы в сетке 2x2. Теперь я получаю диаграмму 1x2, 4 таблицы, а затем следующие 2 диаграммы. Добавление другого \ FloatBarrier, похоже, работает. – rmacey

Смежные вопросы