기본 콘텐츠로 건너뛰기

[matplotlib]quiver()함수

R Markdown 옵션

markdown의 옵션

R마크다운 형식으로 작성된 문서가 HTML형식으로 출력되기 위해서 r마크다운 형식으로 문서를 작성한다. 이를 소스파일이라고 하는데 이 소스파일은 knitr 패키지의 knitr() 함수에 의해 마크다운 파일로 변경된다. 이 변경된 파일의 확장자는 .md이다. 이 파일은 최종적으로 markdown 패키지의 markdownToHTML()함수에 의해 HTML 파일로 전환된다.
마크다운에서 R코드를 입력하는 부분을 코드정크(code junk)이라한다. 이 부분의 옵션을 별도로 정할 수 있는데 코드정크옵션이라 한다.
정크옵션은 백틱과 대괄호 r 다음에 key=vlaue 형식으로 한줄로 입력되어야 한다. 각 옵션들은 쉼표로 구분되어야 한다.
다음 히스토그램을 나타내보자.

```{r Testhist, fig.width=7, fig.height=5}
a<-rnorm(1000)
hist(a, col='blue')
```
## 1 기능적 옵션
코드정크의 출력은 소스, 그래프, 텍스트, 경고, 에러등으로 구분될 수 있고 각 출력을 조절하기 위한 옵션을 소개하면 다음과 같다.

  • cache 옵션
  • cache =TRUE로 지정하면 이에 해당하는 코드 정크의 경우 cache 파일로 별도로 저장된다. 이것은 새로운 코드정크를 생성하는 경우 기존의 정크와 같을 경우 계산을 하지 않고 cache 파일에 저장된 값을 가져와서 사용하게 된다. 물론 코드나 값등이 변한 경우 새롭게 계산하게 된다. 이 옵션의 경우 계산과정이 복잡한 경우 이 코드가 나올 때마다 시행하는 것을 방지할 목적으로 사용된다. 기본값은 FALSE이다.
  • eval 옵션
  • eval=FALSE로 지정하면 지정된 코드 정크는 실행되지 않는다.
  • 또한 코드정크에서 지정된 코드만을 실행하고자 할 경우 실행할 줄 번호를 지정할 수 있다. 예를들어 이 정크 부분의 2, 4번 줄의 코드만을 실행하기 위해 eval=c(2,4)라고 지정한다.
  • include 옵션 include=FALSE는 지정된 코드정크가 출력되지 않는다.
  • label옵션
  • 코드정크에 이름을 부여한다. 정크에 부여된 이름으로 재사용할 수 있다. 다음을 보자.

```{r Testhist}
```
코드 정크의 경우 전의 코드인 Testhist의 코드 정크를 다시 실행한다.
이름을 부여할 경우 빈칸, 마침표(.)를 사용하지 않는다. 또한 동일한 이름의 코드정크를 재사용할 경우 이름만을 호출하고 그 코드를 다시 작성하면 에러가 발생한다.

2 출력옵션

다음은 코드 정크의 출력을 조절 하기 위한 옵션들을 정리한 것이다.
  • echo 옵션
이전의 설명한 eval 옵션과 유사한 기능을 하는 것으로 FALSE로 지정되면 지정된 코드정크는 출력되지 않는다. 또한 일정한 수치를 지정하면 지정된 수치에 해당하는 줄만 코드가 출력된다. 또한 c(3, 6)과 같이 수치형으로 옵션을 지정하는 경우 지정된 줄의 코드만 출력된다. 즉, 다음 코드의 경우 1번 줄의 코드는 출력되지 않는다. 기본은 TRUE로 지정되어 있다.
다음은 echo=F로 지정되어 있으므로 정크코드는 출력되지 않는다.
## [1] 5
다음은 2번째 줄의 코드만 출력된다.
```{r test, echo=2}
rnorm(10) #평균=0, 표준편차 1의 정규분포에 부합하는 랜덤수 10개를 출력
```
##  [1] -0.5638962 -1.6041528  0.2709477  1.7284372  2.5762721 -0.8377047
##  [7]  1.0173615 -0.3241814 -0.2168696  0.3769555
  • prompt
논리형으로 값을 전달한다. 즉, T/F로 지정되며 기본(디폴트)는 F이다.
TRUE(T)로 지정되면 정크코드에 프롬프트(>)가 함께 출력된다.
r test, prompt=T로 옵션을 지정할 경우
> 2+3
## [1] 5
> rnorm(10) #평균=0, 표준편차 1의 정규분포에 부합하는 랜덤수 10개를 출력
##  [1] -0.5638962 -1.6041528  0.2709477  1.7284372  2.5762721 -0.8377047
##  [7]  1.0173615 -0.3241814 -0.2168696  0.3769555
  • tidy옵션
T/F로 값을 주며 기본은 T이다. 이 경우 코드 작성 시 정리하지 않을 경우에 정리되어 결과를 출력한다. 다음을 보자. prompt=TRUE일 경우 프롬프트 기호와 줄바꿈 기호가 같이 출력이 된다. 이 옵션을 이용하기 위해서는 formatR 패키지를 인스톨해야 한다.
r test1, prompt=TRUE로 지정할 경우
> test<-function(x) {a<-sum(x); n<-length(x)
+                   return(a/n)}
r test1, tidy=FALSE로 지정할 경우
test<-function(x) {a<-sum(x); n<-length(x)
                 return(a/n)}
  • comment옵션
일반적으로 R markup으로 작성된 출력물에 ##가 부착되어 표현된다. comment 옵션을 이용하여 이 표시를 지정할 수 있다. 다음의 경우 ’*’로 대체하였다.
{r test, comment='*'} 로 지정
2+3
* [1] 5
rnorm(10) #평균=0, 표준편차 1의 정규분포에 부합하는 랜덤수 10개를 출력
*  [1] -0.736153788 -0.800510631  0.781323733 -1.195559774 -0.039204667
*  [6]  0.135106780 -0.004628224 -0.008960923 -1.201994036  1.118314261
또한 표시 기호를 제거하기 위해 다음과 같이 지정한다. 기본값은 '##'이다.
{r test, comment=NA}
2+3
[1] 5
rnorm(10) #평균=0, 표준편차 1의 정규분포에 부합하는 랜덤수 10개를 출력
[1] -0.1286488  0.8915668  0.8592391  0.4770487  0.6573519  2.0710543
[7]  0.3187738 -0.7429253  0.2948573 -0.9363460
  • results 옵션
결과 텍스트를 반환할 방식을 결정하는 옵션이고 ‘markup’, ‘asis’, ‘hide’ 중에 하나를 선택한다. 디폴트 값은 ’markup’이다. ’asis’는 텍스트를 표로 만들기 위한 옵션이다.
{r hide=TRUE}로 지정

x<-data.frame(op=c(100, 110, 90, 130), hp=c(120, 130, 110, 150), lp=c(80, 90, 70, 100), cp=c(110, 115, 80, 125))
library(knitr)
kable(x, format='latex')
x
##    op  hp  lp  cp
## 1 100 120  80 110
## 2 110 130  90 115
## 3  90 110  70  80
## 4 130 150 100 125
위 코드에서 kable()는 결과는 나타나지 않지만 R 콘솔에서 실행하면 다음과 같이 결과가 반환된다. “begin{tabular}{r|r|r|r}
hline
& hp & lp & cp
hline
& 120 & 80 & 110
hline
& 130 & 90 & 115
hline
& 110 & 70 & 8
hline
& 150 & 100 & 125
hline
end{tabular}”
위 결과는 테이블을 만드는 레이텍 방식이다. html 방식으로 만들기 위해서는 format=’html’로 지정한다. 이 방식에 의한 출력은 표의 형태가 아니라 R 콘솔의 data.frame 형태로 결과를 반환한다.
kable(x, format='html')
op
hp
lp
cp
100
120
80
110
110
130
90
115
90
110
70
80
130
150
100
125
markup은 HTML 형식으로 최종 변환되므로 위 결과는 표로 변환되어 출력된다. 그러나 위 코드를 R 콘솔에서 실행하면 다음과 같은 결과가 반환된다 이것은 html에 의해 표를 형성하는 방식이다.
results의 옵션으로 markup, asis의 최종 결과는 동일하다. 그러나 최종적으로 html 파일로 전환하기 전의 마크다운 파일에 수록되는 결과의 차이가 있을 뿐이다. 오히려 표의 형태로 출력하기 위해서는 kable()함수를 사용하여야 한다.
x
 op  hp  lp  cp
1 100 120  80 110
2 110 130  90 115
3  90 110  70  80
4 130 150 100 125
kable(x)
op
hp
lp
cp
100
120
80
110
110
130
90
115
90
110
70
80
130
150
100
125
x
##    op  hp  lp  cp
## 1 100 120  80 110
## 2 110 130  90 115
## 3  90 110  70  80
## 4 130 150 100 125
kable()외에 xtable() 함수를 사용하여 보다 복잡한 표를 작성할 수 있다.
xtable 패키지는 행렬이나 데이터프레임의 R 객체들을 HTML 또는 latex 형식으로 표를 출력할 수 있게 한다. 다음은 위 데이터 x의 레이텍에 의한 표 작성 코드를 반환한다.
library(xtable)
xtable(x)
% latex table generated in R 3.3.3 by xtable 1.8-2 package
% Wed Jun 07 12:12:39 2017
\begin{table}[ht]
\centering
\begin{tabular}{rrrrr}
 \hline
& op & hp & lp & cp \\
 \hline
1 & 100.00 & 120.00 & 80.00 & 110.00 \\
 2 & 110.00 & 130.00 & 90.00 & 115.00 \\
 3 & 90.00 & 110.00 & 70.00 & 80.00 \\
 4 & 130.00 & 150.00 & 100.00 & 125.00 \\
  \hline
\end{tabular}
\end{table}

옵션을 모아서 관리

한 문서에 정크코드 마다 옵션을 정하는 것은 번거롭다. 그러므로 공통적으로 사용되는 옵션을 일괄적으로 지정하여 사용하는 것이 효율적이다. 이에 적용되는 방법으로 다음의 메소드를 사용하여 지정한다.
- set() : 값 설정 - get() : 설정된 값 확인
- merge() : 설정된 값의 재조합
- restore() : 원래상태로 복귀
  • opts_chunk객체
위 메소드들을 opts_chunk 객체와 결합하여 글로벌 옵션을 설정한다.
다음과 같이 옵션을 지정
```{r include=FALSE, cache=FALSE}
opts_chunk$set(comment=NA, prompt=TRUE)
```
위와 같은 지정된 하위 코드정크는 위의 옵션을 따르게 된다. 물론 하위 정크에서 위와 동일한 옵션의 값을 다르게 지정할 경우 지정된 옵션에 의해 결과가 출력된다.
> 2+3
[1] 5
> rnorm(10) #평균=0, 표준편차 1의 정규분포에 부합하는 랜덤수 10개를 출력
[1]  1.3241409  0.8375826 -2.3784778 -0.2257054 -0.6660036 -0.1272234
[7] -1.5294515 -0.7633220 -0.5202356  0.8357350
2+3
$$ [1] 5
rnorm(10) #평균=0, 표준편차 1의 정규분포에 부합하는 랜덤수 10개를 출력
$$  [1] -2.3997049  1.6654067  0.8228181 -2.4833444 -0.1855624 -0.1595890
$$  [7]  1.1013793  0.1142652  0.3739640 -0.3757838
  • opts_template 객체
이 객체는 특정한 부분의 스타일을 지정할 경우 유용하다. 만약 작성되는 문서의 그림의 크기를 모두 일정하게 만들기 위해서 다음과 같이 사용한다.
```{r include=F, cache=F}
opts_template$set(myFig=list(fig.height=3, fig.width=5))
```

이후 opts.label=’myFig’로 지정하면 모든 출력되는 그림의 높이와 너비가 동일하게 지정된다.
> hist(rnorm(1000))
> hist(rnorm(1000))

댓글

이 블로그의 인기 게시물

[Linear Algebra] 유사변환(Similarity transformation)

유사변환(Similarity transformation) n×n 차원의 정방 행렬 A, B 그리고 가역 행렬 P 사이에 식 1의 관계가 성립하면 행렬 A와 B는 유사행렬(similarity matrix)이 되며 행렬 A를 가역행렬 P와 B로 분해하는 것을 유사 변환(similarity transformation) 이라고 합니다. $$\tag{1} A = PBP^{-1} \Leftrightarrow P^{-1}AP = B $$ 식 2는 식 1의 양변에 B의 고유값을 고려한 것입니다. \begin{align}\tag{식 2} B - \lambda I &= P^{-1}AP – \lambda P^{-1}P\\ &= P^{-1}(AP – \lambda P)\\ &= P^{-1}(A - \lambda I)P \end{align} 식 2의 행렬식은 식 3과 같이 정리됩니다. \begin{align} &\begin{aligned}\textsf{det}(B - \lambda I ) & = \textsf{det}(P^{-1}(AP – \lambda P))\\ &= \textsf{det}(P^{-1}) \textsf{det}((A – \lambda I)) \textsf{det}(P)\\ &= \textsf{det}(P^{-1}) \textsf{det}(P) \textsf{det}((A – \lambda I))\\ &= \textsf{det}(A – \lambda I)\end{aligned}\\ &\begin{aligned}\because \; \textsf{det}(P^{-1}) \textsf{det}(P) &= \textsf{det}(P^{-1}P)\\ &= \textsf{det}(I)\end{aligned}\end{align} 유사행렬의 특성 유사행렬인 두 정방행렬 A와 B는 'A ~ B' 와 같...

[sympy] Sympy객체의 표현을 위한 함수들

Sympy객체의 표현을 위한 함수들 General simplify(x): 식 x(sympy 객체)를 간단히 정리 합니다. import numpy as np from sympy import * x=symbols("x") a=sin(x)**2+cos(x)**2 a $\sin^{2}{\left(x \right)} + \cos^{2}{\left(x \right)}$ simplify(a) 1 simplify(b) $\frac{x^{3} + x^{2} - x - 1}{x^{2} + 2 x + 1}$ simplify(b) x - 1 c=gamma(x)/gamma(x-2) c $\frac{\Gamma\left(x\right)}{\Gamma\left(x - 2\right)}$ simplify(c) $\displaystyle \left(x - 2\right) \left(x - 1\right)$ 위의 예들 중 객체 c의 감마함수(gamma(x))는 확률분포 등 여러 부분에서 사용되는 표현식으로 다음과 같이 정의 됩니다. 감마함수는 음이 아닌 정수를 제외한 모든 수에서 정의됩니다. 식 1과 같이 자연수에서 감마함수는 factorial(!), 부동소수(양의 실수)인 경우 적분을 적용하여 계산합니다. $$\tag{식 1}\Gamma(n) =\begin{cases}(n-1)!& n:\text{자연수}\\\int^\infty_0x^{n-1}e^{-x}\,dx& n:\text{부동소수}\end{cases}$$ x=symbols('x') gamma(x).subs(x,4) $\displaystyle 6$ factorial 계산은 math.factorial() 함수를 사용할 수 있습니다. import math math.factorial(3) 6 a=gamma(x).subs(x,4.5) a.evalf(3) 11.6 simpilfy() 함수의 알고리즘은 식에서 공통사항을 찾아 정리하...

sympy.solvers로 방정식해 구하기

sympy.solvers로 방정식해 구하기 대수 방정식을 해를 계산하기 위해 다음 함수를 사용합니다. sympy.solvers.solve(f, *symbols, **flags) f=0, 즉 동차방정식에 대해 지정한 변수의 해를 계산 f : 식 또는 함수 symbols: 식의 해를 계산하기 위한 변수, 변수가 하나인 경우는 생략가능(자동으로 인식) flags: 계산 또는 결과의 방식을 지정하기 위한 인수들 dict=True: {x:3, y:1}같이 사전형식, 기본값 = False set=True :{(x,3),(y,1)}같이 집합형식, 기본값 = False ratioal=True : 실수를 유리수로 반환, 기본값 = False positive=True: 해들 중에 양수만을 반환, 기본값 = False 예 $x^2=1$의 해를 결정합니다. solve() 함수에 적용하기 위해서는 다음과 같이 식의 한쪽이 0이 되는 형태인 동차식으로 구성되어야 합니다. $$x^2-1=0$$ import numpy as np from sympy import * x = symbols('x') solve(x**2-1, x) [-1, 1] 위 식은 계산 과정은 다음과 같습니다. $$\begin{aligned}x^2-1=0 \rightarrow (x+1)(x-1)=0 \\ x=1 \; \text{or}\; -1\end{aligned}$$ 예 $x^4=1$의 해를 결정합니다. solve() 함수의 인수 set=True를 지정하였으므로 결과는 집합(set)형으로 반환됩니다. eq=x**4-1 solve(eq, set=True) ([x], {(-1,), (-I,), (1,), (I,)}) 위의 경우 I는 복소수입니다.즉 위 결과의 과정은 다음과 같습니다. $$x^4-1=(x^2+1)(x+1)(x-1)=0 \rightarrow x=\pm \sqrt{-1}, \; \pm 1=\pm i,\; \pm1$$ 실수...