2012-07-26 2 views
13

안녕을 변경하는 방법 나는 매우 다른 두 가지 크기의 출력을 얻을 기대할 수있는 다음 코드를 실행knitr 옵션 중반 덩어리

.. 새로운 덩어리를 만들 필요없이, 청크 옵션, 중간 덩어리를 변경하려면, 그러나 웬일인지 이것은 이것이 아닌 것처럼 보입니다.

두 번째 플롯은 전혀 플롯하지 않습니다 ... (플롯 (2 : 1000)으로 변경하면 ... 두 번째 출력은 첫 번째와 동일한 크기 임) fig.width=7

Pls 'mid chunk'의 중요성은 다른 크기의 출력을 얻기 위해 함수를 실행할 때 여러 번 청크 옵션을 변경하려는 이유입니다.

```{r} 
sessionInfo() 

opts_chunk$set(fig.width=3) 

plot(1:1000) 

opts_chunk$set(fig.width=10) 

plot(1:1000) 

``` 

sessionInfo 출력은 다음과 같습니다.

## R version 2.15.1 (2012-06-22) 
## Platform: i386-pc-mingw32/i386 (32-bit) 
## 
## locale: 
## [1] LC_COLLATE=English_United Kingdom.1252 
## [2] LC_CTYPE=English_United Kingdom.1252 
## [3] LC_MONETARY=English_United Kingdom.1252 
## [4] LC_NUMERIC=C       
## [5] LC_TIME=English_United Kingdom.1252  
## 
## attached base packages: 
## [1] stats  graphics grDevices datasets utils  methods base  
## 
## other attached packages: 
## [1] knitr_0.7 
## 
## loaded via a namespace (and not attached): 
## [1] digest_0.5.2 evaluate_0.4.2 formatR_0.5 parser_0.0-16 
## [5] plyr_1.7.1  Rcpp_0.9.13 stringr_0.6 tools_2.15.1 

html preview

+1

이론상 나는'fig.width = c (3, 10)'을 사용하고 각각 3 인치와 10 인치로 두 개의 플롯을 저장할 수 있지만 문제는 내가 플롯을 기록 할 때 하나만 사용할 수 있다는 것입니다 청크 당 크기이므로 레코딩 크기와 드로잉 크기가 다른 경우 플롯이 올바르게 보이지 않을 수 있습니다 ([그래픽 설명서] (https://github.com/downloads/yihui/knitr/knitr-graphics.pdf 참조) 자세한 내용은 –

+0

http://stackoverflow.com/q/11653573/559676 코드 덩어리를 프로그래밍 방식으로 작성하고 편직하는 방법을 보여주는 좋은 예가되어야합니다. 그것은 그 사건보다 더 복잡 할 수 있지만, 어쨌든 그것을 할 수 있습니다. –

답변

5

두 질문 : 당신이 두 수치가 유지 될

```{r fig.keep='all'} 

기본은 (당신의 두 플롯이 동일하기 때문에, 두 번째가 제거 독특한 플롯을 계속 사용하고자하는 경우; 자세한 내용은 knitr graphics manual 참조).

```{r} 
opts_chunk$set(fig.width=10) 
``` 


```{r} 
opts_chunk$set(fig.width=2) 
# Our figure is 10 wide, not 2 
plot(1:1000) 
``` 

```{r} 
# Our figure is 2 wide, not 10 
opts_chunk$set(fig.width=10) 
plot(1:1000) 
``` 
+0

'fig.keep = 'all'' 부분에 동의했습니다. 고마워, 고마워 ...하지만 질문의 주요 부분의 전체 요점은 코드를 별도의 청크로 분해하지 말아야한다는 것이 었습니다. 제가 언급했듯이, 다른 크기의 출력 이미지를 생성하는 단일 함수를 실행하고 있습니다. 생성되고, 일부 이미지에 대해 전체 청크가 OK가되도록 'fig.width'를 설정하면 다른 사람들이 너무 작거나 너무 커서,'opts_current $ set (fig.width = x)'함수의 플롯 사이에. –

+0

편집을 해주셔서 감사합니다. @ Yihui,이 fig.keep은 유물이었습니다. –

+0

@ h.l.m 짧은 대답은 '아니오'입니다. 그런 식으로'opts_current'를 사용할 수 없습니다. –

9

이 GitHub의에 유이에서 힌트를 기반으로, 나를 위해 작동 : 다음 청크 (들) 개방 때

글로벌 청크 옵션이 활성화됩니다.

\documentclass{article} 

\begin{document} 
<<setup,echo=FALSE>>= 
opts_knit$set(progress = F, verbose = F) 
opts_chunk$set(comment=NA, warning=FALSE,message=FALSE,fig.width=6, echo=F) 
kexpand=function(){ 
    cat(knit(
    text=knit_expand(text= 
        "<<yfig-{{cap}}-,fig.cap='{{cap}}',results='markup',echo=FALSE,fig.height={{figheight}},out.height={{outheight}}>>=\n 
        .q\n 
        @" 
) 
))} 
@ 

<<results='asis'>>= 
library(ggplot2) 
.q=qplot(1:10);cap="first caption";figheight=9;outheight=90 
kexpand() 
.q=qplot(1:20);cap="second caption";figheight=12;outheight=160 
kexpand() 

@ 
\end{document} 

그래서 중요한 점은 진행률을 설정하고 자세한 정보를 F로 설정하는 것입니다. 그렇지 않으면 출력이 삭제됩니다. 그런 다음 작은 함수 kexpand는 함수의 일부로 텍스트로 입력되는 인라인 템플릿을 확장합니다. 그런 다음 플롯을 .q로 캡션을 캡으로, 높이를 등으로 정의 할 수 있습니다. 다른 옵션을 제어하기 위해 함수를 적용 할 수 있습니다. 이상하게도 .q와 캡션은 함수의 매개 변수 일 필요는 없으며, 현재 환경에서 설정할 수 있으며 함수에 의해 선택됩니다. 이것이 좋은 관행인지, 왜 효과가 있는지는 알지 못한다.

+0

웬일인지, 당신의 예제를 정확히 따라 가면, 이것은 저에게만 유효합니다. ggplot 이외의 다른 플롯이있는 경우 (기본 R, 메타 포리스트 음모) 작동하지 않습니다. 벡터에 높이가 있고 숫자를 만드는 벡터를 반복하면 더 이상합니다. 내 경우에 맞게 작동하도록 방법을 변경할 수 있는지 알고 싶습니까? http://stackoverflow.com/questions/37998364 – rumtscho

관련 문제