SCM

SCM Repository

[ihelp] Annotation of /www/manual/R-intro-ko.html
ViewVC logotype

Annotation of /www/manual/R-intro-ko.html

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1291 - (view) (download) (as text)

1 : gnustats 1203 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2 :     <html>
3 : gnustats 1291 <!-- 이 매뉴얼은 R Revision: 67332 (3.2.0 Under development (unstable))을 위하여 작성되었습니다.
4 : gnustats 1203
5 :     Copyright (C) 1990 W. N. Venables
6 :     Copyright (C) 1992
7 :     W. N. Venables & D. M. Smith
8 :     Copyright (C) 1997 R.
9 :     Gentleman & R. Ihaka
10 :     Copyright (C) 1997, 1998 M. Maechler
11 :    
12 :     Copyright (C) 1999-2014 R Core Team
13 :    
14 :     Permission is granted to make and distribute verbatim copies of this
15 :     manual provided the copyright notice and this permission notice are
16 :     preserved on all copies.
17 :    
18 :     Permission is granted to copy and distribute modified versions of this
19 :     manual under the conditions for verbatim copying, provided that the
20 :     entire resulting derived work is distributed under the terms of a
21 :     permission notice identical to this one.
22 :    
23 :     Permission is granted to copy and distribute translations of this manual
24 :     into another language, under the above conditions for modified versions,
25 :     except that this permission notice may be stated in a translation
26 :     approved by the R Core Team.
27 :    
28 : gnustats 1222
29 : gnustats 1219 NOTE from the maintainer Chel Hee Lee <chl948@mail.usask.ca>
30 : gnustats 1214
31 : gnustats 1291 This translation is updated on a day-by-day basis (Tue Jan 6 01:17:00 CST 2015). The initial work was done with R-2.7.2 (25-AUG-2008) by Chel Hee Lee. The latest version is based on the Revision: 67332 (3.2.0 Under development (unstable)).
32 : gnustats 1203
33 : gnustats 1216 This work is a result of cumulative efforts made by the contributors listed in the below:
34 : gnustats 1229 Chel Hee Lee <chl948@mail.usask.ca>, University of Saskatchewan, Saskatoon, Saskatchewan, Canada, 2008-2014
35 : gnustats 1219 Lijin Joo <lijin.joo@nyu.edu>, New York University, New York, New York, U.S.A., 2009, 2012, 2013
36 : gnustats 1222 Heather Kim <heatherkimca@gmail.com>, University of Manitoba, Canada, 2009, 2012, 2013.
37 : gnustats 1219 Johan Jung <jungyha@gmail.com>, Pacific Biological Station, Department of Fisheries and Ocean, Canada, 2011, 2013.
38 :     Woo June Jung <whitelog6@gmail.com>, Hongik University, Seoul, Korea, 2009, 2013.
39 :     Seyeon Lee <mandooms@gmail.com>, Ewha Women's University, Seoul, Korea, 2009.
40 : gnustats 1225
41 :     If you wish to voluntarily participate in this translation project, please visit the page at http://r-forge.r-project.org/projects/ihelp/
42 : gnustats 1222 -->
43 : gnustats 1203 <!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
44 :     <head>
45 : gnustats 1222 <title>An Introduction to R (translated in Korean)</title>
46 : gnustats 1203
47 : gnustats 1222 <meta name="description" content="An Introduction to R (translated in Korean)">
48 :     <meta name="keywords" content="An Introduction to R (translated in Korean)">
49 : gnustats 1203 <meta name="resource-type" content="document">
50 :     <meta name="distribution" content="global">
51 :     <meta name="Generator" content="makeinfo">
52 :     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
53 : gnustats 1249 <link href="#Top" rel="start" title="Top">
54 : gnustats 1252 <link href="#g_t_00ed_0095_00a8_00ec_0088_0098-_00eb_00b0_008f-_00eb_00b3_0080_00ec_0088_0098_00ec_0099_0080-_00ea_00b4_0080_00eb-_00a8_00eb_0090_009c-_00ec_0083_0089_00ec_009d_00b8" rel="index" title="함수 및 변수와 관련된 색인">
55 : gnustats 1203 <link href="#SEC_Contents" rel="contents" title="Table of Contents">
56 :     <link href="dir.html#Top" rel="up" title="(dir)">
57 :     <style type="text/css">
58 :     <!--
59 :     a.summary-letter {text-decoration: none}
60 :     blockquote.smallquotation {font-size: smaller}
61 :     div.display {margin-left: 3.2em}
62 :     div.example {margin-left: 3.2em}
63 :     div.indentedblock {margin-left: 3.2em}
64 :     div.lisp {margin-left: 3.2em}
65 :     div.smalldisplay {margin-left: 3.2em}
66 :     div.smallexample {margin-left: 3.2em}
67 :     div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
68 :     div.smalllisp {margin-left: 3.2em}
69 :     kbd {font-style:oblique}
70 :     pre.display {font-family: inherit}
71 :     pre.format {font-family: inherit}
72 :     pre.menu-comment {font-family: serif}
73 :     pre.menu-preformatted {font-family: serif}
74 :     pre.smalldisplay {font-family: inherit; font-size: smaller}
75 :     pre.smallexample {font-size: smaller}
76 :     pre.smallformat {font-family: inherit; font-size: smaller}
77 :     pre.smalllisp {font-size: smaller}
78 :     span.nocodebreak {white-space:nowrap}
79 :     span.nolinebreak {white-space:nowrap}
80 :     span.roman {font-family:serif; font-weight:normal}
81 :     span.sansserif {font-family:sans-serif; font-weight:normal}
82 :     ul.no-bullet {list-style: none}
83 :     body {
84 :     margin-left: 5%;
85 :     margin-right: 5%;
86 :     }
87 :    
88 :     h1 {
89 :     background: white;
90 :     color: rgb(25%, 25%, 25%);
91 :     font-family: monospace;
92 :     font-size: xx-large;
93 :     text-align: center;
94 :     }
95 :    
96 :     h2 {
97 :     background: white;
98 :     color: rgb(40%, 40%, 40%);
99 :     font-family: monospace;
100 :     font-size: x-large;
101 :     text-align: center;
102 :     }
103 :    
104 :     h3 {
105 :     background: white;
106 :     color: rgb(40%, 40%, 40%);
107 :     font-family: monospace;
108 :     font-size: large;
109 :     }
110 :    
111 :     h4 {
112 :     background: white;
113 :     color: rgb(40%, 40%, 40%);
114 :     font-family: monospace;
115 :     }
116 :    
117 :     span.samp {
118 :     font-family: monospace;
119 :     }
120 :    
121 :     span.command {
122 :     font-family: monospace;
123 :     }
124 :    
125 :     span.option {
126 :     font-family: monospace;
127 :     }
128 :    
129 :     span.file {
130 :     font-family: monospace;
131 :     }
132 :    
133 :     span.env {
134 :     font-family: monospace;
135 :     }
136 :    
137 :     ul {
138 :     margin-top: 0.25ex;
139 :     margin-bottom: 0.25ex;
140 :     }
141 :    
142 :     li {
143 :     margin-top: 0.25ex;
144 :     margin-bottom: 0.25ex;
145 :     }
146 :    
147 :     p {
148 :     margin-top: 0.6ex;
149 :     margin-bottom: 1.2ex;
150 :     }
151 :    
152 :     -->
153 :     </style>
154 :    
155 :    
156 :     </head>
157 :    
158 :     <body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
159 : gnustats 1222 <h1 class="settitle" align="center">An Introduction to R (translated in Korean)</h1>
160 : gnustats 1203
161 :    
162 :    
163 :    
164 :    
165 :    
166 :    
167 :    
168 :    
169 :    
170 :    
171 :    
172 :    
173 :    
174 :    
175 :    
176 :    
177 :    
178 :    
179 :    
180 :    
181 :    
182 : gnustats 1222
183 : gnustats 1203
184 :    
185 :    
186 : gnustats 1213
187 :    
188 : gnustats 1222
189 : gnustats 1203 <a name="SEC_Contents"></a>
190 :     <h2 class="contents-heading">Table of Contents</h2>
191 :    
192 :     <div class="contents">
193 :    
194 :     <ul class="no-bullet">
195 : gnustats 1251 <li><a name="toc-ie_0021_002c" href="#g_t_00ec_0084_009c_00eb_00ac_00b8">서문</a></li>
196 :     <li><a name="toc-ie_00b0-e_00b0-e_002d_002ce_007c_0021-iiei_0027i1_002f4-i-e_0027i_00a9" href="#g_t_00ec_0086_008c_00ea_00b0_009c-_00eb_00b0_008f-_00eb_00af_00b8_00eb_00a6_00ac-_00ec_0095_008c_00ec_0095_0084_00eb_0091_0090_00ec_0096_00b4_00ec_0095_00bc-_00ed_0095-_00eb_0082_00b4_00ec_009a_00a9">1 소개 및 미리 알아두어야 할 내용</a>
197 : gnustats 1203 <ul class="no-bullet">
198 : gnustats 1251 <li><a name="toc-Ri-ie21_002f2-_0028i_002ce_00b0i_0027e_00b0e_00221_002f4i_002c-ee-environment_0029" href="#R_00ec_009d_0098-_00ed_0099_0098_00ea_00b2_00bd-_0028_00ec_009d_00b8_00eb_00b0_0094_00ec_009d_00b4_00eb_009f_00b0_00eb_00a8_00bc_00ed_008a_00b8-_00eb_0098_0090_00eb_008a_0094-environment_0029">1.1 R의 환경 (인바이런먼트 또는 environment)</a></li>
199 :     <li><a name="toc-i_00b0e_0027e-iii_002ci_0022i_0027-e_00b0-e_0021_002cie_0024_003f" href="#g_t_00ec_0097_00b0_00ea_00b4_0080_00eb_0090_009c-_00ec_0086_008c_00ed_0094_0084_00ed_008a_00b8_00ec_009b_00a8_00ec_0096_00b4-_00eb_00b0_008f-_00eb_00ac_00b8_00ec_0084_009c_00eb_0093_00a4">1.2 연관된 소프트웨어 및 문서들</a></li>
200 :     <li><a name="toc-Re31_002f4-iue3" href="#R_00ea_00b3_00bc-_00ed_0086_00b5_00ea_00b3_0084">1.3 Rê³¼ 통계</a></li>
201 :     <li><a name="toc-Re31_002f4-iei_00b0-ii_0024_003fi-" href="#R_00ea_00b3_00bc-_00ec_009c_0088_00eb_008f_0084_00ec_009a_00b0-_00ec_008b_009c_00ec_008a_00a4_00ed-_009c">1.4 Rê³¼ 윈도우 시스템</a></li>
202 :     <li><a name="toc-Ri-eiii1_002f4e_00a1-i_0021i_00a9ie_002c_00b0" href="#R_00ec_009d_0084-_00eb_008c_0080_00ed_0099_0094_00ec_008b_009d_00ec_009c_00bc_00eb_00a1_009c-_00ec_0082_00ac_00ec_009a_00a9_00ed_0095_0098_00ea_00b8_00b0">1.5 R을 대화식으로 사용하기</a></li>
203 :     <li><a name="toc-ie_00b0-i_002ci-" href="#ie_00b0-i_002ci-">1.6 소개 세션</a></li>
204 :     <li><a name="toc-i_0022ii-i_0027i-e_002c_00b0eY_003di-ei-eieSS-i_0021i_00a9ie_002c_00b0" href="#g_t_00eb_008f_0084_00ec_009b_0080_00eb_00a7_0090-_00ea_00b8_00b0_00eb_008a_00a5-_00ec_0082_00ac_00ec_009a_00a9_00ed_0095_0098_00ea_00b8_00b0">1.7 함수와 이의 기능에 대한 도움말 사용하기</a></li>
205 :     <li><a name="toc-R-e_00aa-e-1i_0027-e_00b0-eie_0021_002cii-eu_0021ePe31_002f4-e_00b0i-e_0027i_00a9e_0024_003f" href="#R-_00eb_00aa-_00eb-_00b9_00ec_0096_00b4-_00eb_00b0_008f-_00eb_008c_0080_00ec_0086_008c_00eb_00ac_00b8_00ec_009e_0090_00ec_009d_0098-_00ea_00b5_00ac_00eb_00b6_0084_00ea_00b3_00bc-_00ea_00b0_0099_00ec_009d_0080-_00eb_0082_00b4_00ec_009a_00a9_00eb_0093_00a4">1.8 R 명령어 및 대소문자의 구분과 같은 내용들</a></li>
206 :     <li><a name="toc-i_0027i-i-e_00aa-e-1i_0027eY_003d1_002f4-ePe_0021i-ii-ie_002c_00b0" href="#g_t_00ec_009d_00b4_00ec-_0084_00ec_009d_0098-_00eb_00aa-_00eb-_00b9_00ec_0096_00b4_00eb_00a5_00bc-_00eb_00b6_0088_00eb_009f_00ac_00ec_0099_0080-_00ec_0088_0098_00ec-_0095_00ed_0095_0098_00ea_00b8_00b0">1.9 이전의 명령어를 불러와 수정하기</a></li>
207 :     <li><a name="toc-ii1_002f4i-ii_002b_002de-e_00aa-e-1i_0027eY_003d1_002f4-i_0024_003fiie_002b_002d_00b0e-iPe-Y_003de_00b0_00a9iY_003di-ii1_002f4e_00a1-e3e21_002f2ie_002c_00b0" href="#g_t_00ed_008c_008c_00ec_009d_00bc_00ec_0097_0090-_00ec_009e_0091_00ec_0084_00b1_00eb_0090_009c-_00eb_00aa-_00eb-_00b9_00ec_0096_00b4_00eb_00a5_00bc-_00ec_008b_00a4_00ed_0096_0089_00ed_0095_0098_00ea_00b1_00b0_00eb_0082_0098-_00ec_00b6_009c_00eb-_00a5_00eb_00b0_00a9_00ed_0096_00a5_00ec_009d_0084-_00ed_008c_008c_00ec_009d_00bc_00eb_00a1_009c-_00eb_00b3_0080_00ea_00b2_00bd_00ed_0095_0098_00ea_00b8_00b0">1.10 파일에 작성된 명령어를 실행하거나 출력방향을 파일로 변경하기</a></li>
208 :     <li><a name="toc-ieu_0021i--e_00b0i_0027i_00b0-ii_002b_002d-e_00b0-e_00b0i2_0027i-i-e_002b_002d_00b0" href="#g_t_00ec_0098_0081_00ea_00b5_00ac_00ec-_0081-_00eb_008d_00b0_00ec_009d_00b4_00ed_0084_00b0-_00ec_0083_009d_00ec_0084_00b1-_00eb_00b0_008f-_00ea_00b0_009d_00ec_00b2_00b4_00ec_009d_0098-_00ec-_009c_00ea_00b1_00b0">1.11 영구적 데이터 생성 및 객체의 제거</a></li>
209 : gnustats 1203 </ul></li>
210 : gnustats 1235 <li><a name="toc-i_00abii-e2_00a1i_00b0i-ei-e_002c_00b0i_0027-i_00a1_00b0ie2" href="#Simple-manipulations-numbers-and-vectors">2 숫자와 벡터에 대한 기초 조작법</a>
211 : gnustats 1203 <ul class="no-bullet">
212 : gnustats 1251 <li><a name="toc-e2_00a1i_00b0i-i-e1" href="#g_t_00eb_00b2_00a1_00ed_0084_00b0_00ec_0099_0080-_00ed_0095-_00eb_008b_00b9">2.1 벡터와 할당</a></li>
213 :     <li><a name="toc-e2_00a1i_00b0-i_00b0i_00b0" href="#g_t_00eb_00b2_00a1_00ed_0084_00b0-_00ec_0097_00b0_00ec_0082_00b0">2.2 벡터 연산</a></li>
214 : gnustats 1245 <li><a name="toc-Generating-regular-sequences-_0028e_002ai1i_002b_002di-iSSe-i1_002f4e-_0022i-i_00abie_0024_003fi-ii_002b_002die_002c_00b0_0029" href="#Generating-regular-sequences-_0028_00ea_00b7_009c_00ec_00b9_0099_00ec_0084_00b1_00ec_009d_0084-_00ec_00a7_0080_00eb_008b_008c-_00ec_009d_00bc_00eb-_00a8_00ec_009d_0098-_00ec_0088_00ab_00ec_009e_0090_00eb_0093_00a4_00ec_009d_0084-_00ec_0083_009d_00ec_0084_00b1_00ed_0095_0098_00ea_00b8_00b0_0029">2.3 Generating regular sequences (규칙성을 지닌 일련의 숫자들을 생성하기)</a></li>
215 : gnustats 1251 <li><a name="toc-e-1_002f4e_007c_0021i-e2_00a1i_00b0" href="#g_t_00eb-_00bc_00eb_00a6_00ac_00ed_0098_0095-_00eb_00b2_00a1_00ed_0084_00b0">2.4 논리형 벡터</a></li>
216 :     <li><a name="toc-e2_00b0i_002c_00a1e_00b0" href="#g_t_00ea_00b2_00b0_00ec_00b8_00a1_00ea_00b0_0092">2.5 결측값</a></li>
217 :     <li><a name="toc-e_0021_002cii-e2_00a1i_00b0" href="#g_t_00eb_00ac_00b8_00ec_009e_0090_00ed_0098_0095-_00eb_00b2_00a1_00ed_0084_00b0">2.6 문자형 벡터</a></li>
218 :     <li><a name="toc-i_002ce_002b_002di_0024_003f-e2_00a1i_00b0eY_003d1_002f4-i_0021i_00a9i-e_00b0i_0027i_00b0i-i-i-ie31_002f4-ii-" href="#g_t_00ec_009d_00b8_00eb_008d_00b1_00ec_008a_00a4-_00eb_00b2_00a1_00ed_0084_00b0">2.7 인덱스 벡터를 사용한 데이터셋의 선택과 수정</a></li>
219 :     <li><a name="toc-e_00b0i2_0027i-e_0024_003feY_003d_002c-i-ie_0024_003f" href="#g_t_00ea_00b0_009d_00ec_00b2_00b4_00ec_009d_0098-_00eb_008b_00a4_00eb_00a5_00b8-_00ec_009c-_00ed_0098_0095_00eb_0093_00a4">2.8 객체의 다른 유형들</a></li>
220 : gnustats 1203 </ul></li>
221 : gnustats 1251 <li><a name="toc-e_00b0i2_0027i-i-iY_003de_00b0_00a9ie31_002f4-ii_002b_002d" href="#Objects">3 객체의 저장방식과 속성</a>
222 : gnustats 1203 <ul class="no-bullet">
223 : gnustats 1251 <li><a name="toc-e3-i-ii_002b_002d_003a-i-iY_003de_00b0_00a9e2-e_002a_002ce_007c_0021e3-e_002c_002ci_0027" href="#The-intrinsic-attributes-mode-and-length">3.1 고유속성: 저장방법 그리고 길이</a></li>
224 :     <li><a name="toc-e_00b0i2_0027i-e_002c_002ci_0027-e3e21_002f2" href="#g_t_00ea_00b0_009d_00ec_00b2_00b4_00ec_009d_0098-_00ea_00b8_00b8_00ec_009d_00b4-_00eb_00b3_0080_00ea_00b2_00bd">3.2 객체의 길이 변경</a></li>
225 : gnustats 1244 <li><a name="toc-Getting-and-setting-attributes-_0028ii_002b_002di-i_0024_003fi-ie3-ii_002cie_002c_00b0_0029" href="#Getting-and-setting-attributes-_0028_00ec_0086_008d_00ec_0084_00b1_00ec_009d_0084-_00ec_0084_00a4_00ec-_0095_00ed_0095_0098_00ea_00b3-_00ed_0099_0095_00ec_009d_00b8_00ed_0095_0098_00ea_00b8_00b0_0029">3.3 Getting and setting attributes (속성을 설정하고 확인하기)</a></li>
226 : gnustats 1251 <li><a name="toc-e_00b0i2_0027i-i_0027ei_0024_003f" href="#g_t_00ea_00b0_009d_00ec_00b2_00b4_00ec_009d_0098-_00ed_0081_00b4_00eb_009e_0098_00ec_008a_00a4">3.4 객체의 클래스</a></li>
227 : gnustats 1203 </ul></li>
228 : gnustats 1252 <li><a name="toc-iiie31_002f4-e1iii-ii_002c" href="#Factors-_0028_00ec_009a_0094_00ec_009d_00b8_0029">4 순서형과 비순서형 요인</a>
229 : gnustats 1203 <ul class="no-bullet">
230 : gnustats 1235 <li><a name="toc-eu_0021i2_0027i-i_002c-ii-" href="#eu_0021i2_0027i-i_002c-ii-">4.1 구체적인 예제</a></li>
231 : gnustats 1252 <li><a name="toc-i_0022i-tapply_0028_0029i-e1i-i-e_00b0_00b0i_0027" href="#The-function-tapply_0028_0029-and-ragged-arrays">4.2 함수 <code>tapply()</code>와 비정형 배열</a></li>
232 :     <li><a name="toc-iii-ii_002c" href="#g_t_00ec_0088_009c_00ec_0084_009c_00ed_0098_0095-_00ec_009a_0094_00ec_009d_00b8">4.3 순서형 요인</a></li>
233 : gnustats 1203 </ul></li>
234 : gnustats 1235 <li><a name="toc-Arrays-and-matrices-_0028e_00b0_00b0i_0027e31_002f4-ie-_0021_0029" href="#Arrays-and-matrices-_0028_00eb_00b0_00b0_00ec_0097_00b4_00ea_00b3_00bc-_00ed_0096_0089_00eb-_00ac_0029">5 Arrays and matrices (배열과 행렬)</a>
235 : gnustats 1203 <ul class="no-bullet">
236 : gnustats 1252 <li><a name="toc-e_00b0_00b0i_0027" href="#g_t_00eb_00b0_00b0_00ec_0097_00b4">5.1 배열</a></li>
237 : gnustats 1235 <li><a name="toc-e_00b0_00b0i_0027-i_002ce_002b_002di_002b_002d_0028array-indexing_0029e31_002f4-eu_0021i_002b_002diii-i-ii--iSSi-_0028subsections_0029" href="#Array-indexing">5.2 배열 인덱싱(array indexing)과 구성요소의 선택적 지정(subsections)</a></li>
238 : gnustats 1246 <li><a name="toc-Index-matrices-_0028i_002ce_002b_002di_0024_003f-ie-_0021_0029" href="#Index-matrices-_0028_00ec_009d_00b8_00eb_008d_00b1_00ec_008a_00a4-_00ed_0096_0089_00eb-_00ac_0029">5.3 Index matrices (인덱스 행렬)</a></li>
239 : gnustats 1243 <li><a name="toc-array_0028_0029-i_0022i" href="#array_0028_0029-_00ed_0095_00a8_00ec_0088_0098">5.4 <code>array()</code> 함수</a>
240 : gnustats 1203 <ul class="no-bullet">
241 : gnustats 1252 <li><a name="toc-e2_00a1i_00b0i-e_00b0_00b0i_0027i-i_0022e_00bb-i_0027i_00a9ii_0021-i_00b0i_00b0ie-e_00b0_00a9e2-e_002a_002ce_007c_0021e3-i_0021ii_00a9-e_002ai1" href="#The-recycling-rule">5.4.1 벡터와 배열을 함께 이용하여 연산하는 방법 그리고 재활용 규칙</a></li>
242 : gnustats 1203 </ul></li>
243 : gnustats 1252 <li><a name="toc-e-e_00b0_00b0i_0027i-i_002ci-" href="#g_t_00eb_0091_0090-_00eb_00b0_00b0_00ec_0097_00b4_00ec_009d_0098-_00ec_0099_00b8_00ec-_0081">5.5 두 배열의 외적</a></li>
244 :     <li><a name="toc-e_00b0_00b0i_0027i-i-i1i-i_0021i_00a9ee-i1_002f4e_00b0ie-e_00b0_00a9e2" href="#g_t_00eb_00b0_00b0_00ec_0097_00b4_00ec_009d_0098-_00ec-_0084_00ec_00b9_0098_00ec_0097_0090-_00ec_0082_00ac_00ec_009a_00a9_00eb_0090_0098_00eb_008a_0094-_00ec_009d_00bc_00eb_00b0_0098_00ed_0099_0094_00eb_0090_009c-_00eb_00b0_00a9_00eb_00b2_0095">5.6 배열의 전치에 사용되는 일반화된 방법</a></li>
245 :     <li><a name="toc-ie-_0021i-e_002c_00b0eY_003de_0024_003f" href="#g_t_00ed_0096_0089_00eb-_00ac_00ec_009d_0098-_00ea_00b8_00b0_00eb_008a_00a5_00eb_0093_00a4">5.7 행렬의 기능들</a>
246 : gnustats 1203 <ul class="no-bullet">
247 : gnustats 1252 <li><a name="toc-ie-_0021i-e3_002b_002di-" href="#Multiplication">5.7.1 행렬의 곱셈</a></li>
248 :     <li><a name="toc-i-ie_00b0_00a9i-ie31_002f4-iie-_0021" href="#g_t_00ec_0084-_00ed_0098_0095_00eb_00b0_00a9_00ec-_0095_00ec_008b_009d_00ea_00b3_00bc-_00ec_0097_00ad_00ed_0096_0089_00eb-_00ac">5.7.2 선형방정식과 역행렬</a></li>
249 :     <li><a name="toc-e3-i-e_00b0e31_002f4-e3-i-e2_00a1i_00b0" href="#g_t_00ea_00b3-_00ec_009c-_00ea_00b0_0092_00ea_00b3_00bc-_00ea_00b3-_00ec_009c-_00eb_00b2_00a1_00ed_0084_00b0">5.7.3 고유값과 고유벡터</a></li>
250 :     <li><a name="toc-i1i_0027e_00b0-ePi_0027-e_00b0-ie-_0021i" href="#g_t_00ed_008a_00b9_00ec_009d_00b4_00ea_00b0_0092-_00eb_00b6_0084_00ed_0095_00b4-_00eb_00b0_008f-_00ed_0096_0089_00eb-_00ac_00ec_008b_009d">5.7.4 특이값 분해 및 행렬식</a></li>
251 :     <li><a name="toc-iuii-e3_002b_002de2e31_002f4-QR-ePi_0027e2" href="#g_t_00ec_00b5_009c_00ec_0086_008c_00ec-_009c_00ea_00b3_00b1_00eb_00b2_0095_00ea_00b3_00bc-QR-_00eb_00b6_0084_00ed_0095_00b4_00eb_00b2_0095">5.7.5 최소제곱법과 QR 분해법</a></li>
252 : gnustats 1203 </ul></li>
253 : gnustats 1252 <li><a name="toc-cbind_0028_0029i-rbind_0028_0029eY_003d1_002f4-i_0027i_00a9ii_0021-ePi-e-ie-_0021i-i_00a1_00b0i_00a9ie_002c_00b0" href="#Forming-partitioned-matrices">5.8 <code>cbind()</code>와 <code>rbind()</code>를 이용하여 분할된 행렬을 조합하기</a></li>
254 :     <li><a name="toc-e_00b0_00b0i_0027ii-i_0021i_00a9ie-e2_00b0i_00a9_0028concatenation_0029-i_0022i-c_0028_0029" href="#g_t_00eb_00b0_00b0_00ec_0097_00b4_00ec_0097_0090-_00ec_0082_00ac_00ec_009a_00a9_00eb_0090_0098_00eb_008a_0094-_00ea_00b2_00b0_00ed_0095_00a9_00ed_0095_00a8_00ec_0088_0098-c_0028_0029">5.9 배열에서 사용하는 결합(concatenation) 함수 <code>c()</code></a></li>
255 :     <li><a name="toc-ii_002ci-i_0027i_00a9ii_0021-eiePi_0021i-ii_002b_002die_002c_00b0" href="#g_t_00ec_009a_0094_00ec_009d_00b8_00ec_009d_0084-_00ec_009d_00b4_00ec_009a_00a9_00ed_0095_0098_00ec_0097_00ac-_00eb_008f_0084_00ec_0088_0098_00eb_00b6_0084_00ed_008f_00ac_00ed_0091_009c-_00ec_0083_009d_00ec_0084_00b1_00ed_0095_0098_00ea_00b8_00b0">5.10 요인을 이용하여 도수분포표 생성하기</a></li>
256 : gnustats 1203 </ul></li>
257 : gnustats 1252 <li><a name="toc-e_007c_0021i_0024_003fi_002ci-e_00b0i_0027i_00b0-ie-i" href="#g_t_00eb_00a6_00ac_00ec_008a_00a4_00ed_008a_00b8_00ec_0099_0080-_00eb_008d_00b0_00ec_009d_00b4_00ed_0084_00b0-_00ed_0094_0084_00eb-_0088_00ec_009e_0084">6 리스트와 데이터 프레임</a>
258 : gnustats 1203 <ul class="no-bullet">
259 : gnustats 1235 <li><a name="toc-Lists-_0028e_007c_0021i_0024_003fi_002c_0029" href="#Lists-_0028_00eb_00a6_00ac_00ec_008a_00a4_00ed_008a_00b8_0029">6.1 Lists (리스트)</a></li>
260 : gnustats 1254 <li><a name="toc-e_007c_0021i_0024_003fi_002ceY_003d1_002f4-ii_002b_002de31_002f4-ii-" href="#g_t_00eb_00a6_00ac_00ec_008a_00a4_00ed_008a_00b8_00eb_00a5_00bc-_00ec_0083_009d_00ec_0084_00b1_00ea_00b3_00bc-_00ec_0088_0098_00ec-_0095">6.2 리스트를 생성과 수정</a>
261 : gnustats 1203 <ul class="no-bullet">
262 : gnustats 1244 <li><a name="toc-Concatenating-lists-_0028e_007c_0021i_0024_003fi_002c-i_00b0e2_00b0ie_002c_00b0_0029" href="#Concatenating-lists-_0028_00eb_00a6_00ac_00ec_008a_00a4_00ed_008a_00b8-_00ec_0097_00b0_00ea_00b2_00b0_00ed_0095_0098_00ea_00b8_00b0_0029">6.2.1 Concatenating lists (리스트 연결하기)</a></li>
263 : gnustats 1203 </ul></li>
264 : gnustats 1235 <li><a name="toc-Data-frames-_0028e_00b0i_0027i_00b0-ie-i_0029" href="#Data-frames-_0028_00eb_008d_00b0_00ec_009d_00b4_00ed_0084_00b0-_00ed_0094_0084_00eb-_0088_00ec_009e_0084_0029">6.3 Data frames (데이터 프레임)</a>
265 : gnustats 1203 <ul class="no-bullet">
266 : gnustats 1252 <li><a name="toc-e_00b0i_0027i_00b0-ie-i-ii_002b_002die_002c_00b0" href="#g_t_00eb_008d_00b0_00ec_009d_00b4_00ed_0084_00b0-_00ed_0094_0084_00eb-_0088_00ec_009e_0084-_00ec_0083_009d_00ec_0084_00b1_00ed_0095_0098_00ea_00b8_00b0">6.3.1 데이터 프레임 생성하기</a></li>
267 : gnustats 1291 <li><a name="toc-attach_0028_0029-and-detach_0028_0029" href="#attach_0028_0029_00ec_0099_0080-detach_0028_0029">6.3.2 <code>attach()</code> and <code>detach()</code></a></li>
268 : gnustats 1252 <li><a name="toc-e_00b0i_0027i_00b0-ie-i-ii_00a9ie_002c_00b0" href="#g_t_00eb_008d_00b0_00ec_009d_00b4_00ed_0084_00b0-_00ed_0094_0084_00eb-_0088_00ec_009e_0084-_00ed_0099_009c_00ec_009a_00a9_00ed_0095_0098_00ea_00b8_00b0">6.3.3 데이터 프레임 활용하기</a></li>
269 : gnustats 1254 <li><a name="toc-Attaching-arbitrary-lists-_0028iii-i_002c-e_007c_0021i_0024_003fi_002ceY_003d1_002f4-i_00b0e2_00b0ie_002c_00b0_0029" href="#Attaching-arbitrary-lists-_0028_00ec_009e_0084_00ec_009d_0098_00ec-_0081_00ec_009d_00b8-_00eb_00a6_00ac_00ec_008a_00a4_00ed_008a_00b8_00eb_00a5_00bc-_00ec_0097_00b0_00ea_00b2_00b0_00ed_0095_0098_00ea_00b8_00b0_0029">6.3.4 Attaching arbitrary lists (임의적인 리스트를 연결하기)</a></li>
270 : gnustats 1252 <li><a name="toc-iie21_002f2e_00a1eY_003d1_002f4-e_0027e_007c_0021ie_002c_00b0" href="#g_t_00ed_0083_0090_00ec_0083_0089_00ea_00b2_00bd_00eb_00a1_009c_00eb_00a5_00bc-_00ea_00b4_0080_00eb_00a6_00ac_00ed_0095_0098_00ea_00b8_00b0">6.3.5 탐색경로를 관리하기</a></li>
271 : gnustats 1203 </ul></li>
272 :     </ul></li>
273 : gnustats 1244 <li><a name="toc-Reading-data-from-files-_0028ii1_002f4e_00a1ePi_00b0-e_00b0i_0027i_00b0-i1_002f2i_0027i_0024_003fe_002c_00b0_0029" href="#Reading-data-from-files-_0028_00ed_008c_008c_00ec_009d_00bc_00eb_00a1_009c_00eb_00b6_0080_00ed_0084_00b0-_00eb_008d_00b0_00ec_009d_00b4_00ed_0084_00b0-_00ec_009d_00bd_00ec_0096_00b4_00ec_0098_00a4_00ea_00b8_00b0_0029">7 Reading data from files (파일로부터 데이터 읽어오기)</a>
274 : gnustats 1203 <ul class="no-bullet">
275 : gnustats 1252 <li><a name="toc-read_002etable_0028_0029-i_0022i" href="#The-read_002etable_0028_0029-function">7.1 <code>read.table()</code> 함수</a></li>
276 :     <li><a name="toc-scan_0028_0029-i_0022i" href="#The-scan_0028_0029-function">7.2 <code>scan()</code> 함수</a></li>
277 :     <li><a name="toc-e_0027iY_003de-e_00b0i_0027i_00b0i-i-i_0027i_00a9ie_002c_00b0" href="#g_t_00eb_0082_00b4_00ec_009e_00a5_00eb_0090_009c-_00eb_008d_00b0_00ec_009d_00b4_00ed_0084_00b0_00ec-_008b_00ec_009d_0084-_00ec_009d_00b4_00ec_009a_00a9_00ed_0095_0098_00ea_00b8_00b0">7.3 내장된 데이터셋을 이용하기</a>
278 : gnustats 1203 <ul class="no-bullet">
279 :     <li><a name="toc-e_0024_003feY_003d_002c-R-i_0022i_0024_003fiSSe_0024_003fe_00a1ePi_00b0-e_00b0i_0027i_00b0eY_003d1_002f4-e_00a1e_00a9ie_002c_00b0" href="#e_0024_003feY_003d_002c-R-i_0022i_0024_003fiSSe_0024_003fe_00a1ePi_00b0-e_00b0i_0027i_00b0eY_003d1_002f4-e_00a1e_00a9ie_002c_00b0">7.3.1 다른 R 패키지들로부터 데이터를 로딩하기</a></li>
280 :     </ul></li>
281 : gnustats 1252 <li><a name="toc-e_00b0i_0027i_00b0eY_003d1_002f4-i_002ciSSie_002c_00b0" href="#g_t_00eb_008d_00b0_00ec_009d_00b4_00ed_0084_00b0_00eb_00a5_00bc-_00ed_008e_00b8_00ec_00a7_0091_00ed_0095_0098_00ea_00b8_00b0">7.4 데이터를 편집하기</a></li>
282 : gnustats 1203 </ul></li>
283 : gnustats 1252 <li><a name="toc-ieY_003d-ePi_0021i_0022i" href="#g_t_00ed_0099_0095_00eb_00a5-_00eb_00b6_0084_00ed_008f_00ac_00ed_0095_00a8_00ec_0088_0098">8 확률분포함수</a>
284 : gnustats 1203 <ul class="no-bullet">
285 : gnustats 1252 <li><a name="toc-iue3ePi_0021ie_0024_003fi-ie_00b0-e_0021Pi_0027-ei-R" href="#g_t_00ed_0086_00b5_00ea_00b3_0084_00eb_00b6_0084_00ed_008f_00ac_00ed_0091_009c_00eb_0093_00a4_00ec_009d_0084-_00ed_0095_009c_00eb_008d_00b0-_00eb_00ac_00b6_00ec_0096_00b4-_00eb_0086_0093_00ec_009d_0080-R">8.1 통계분포표들을 한데 묶어 놓은 R</a></li>
286 :     <li><a name="toc-e_00b0i_0027i_00b0i-ePi_0021-i_0027i_0027e3_0027e_002c_00b0" href="#g_t_00eb_008d_00b0_00ec_009d_00b4_00ed_0084_00b0_00ec_009d_0098-_00eb_00b6_0084_00ed_008f_00ac-_00ec_0082_00b4_00ed_008e_00b4_00eb_00b3_00b4_00ea_00b8_00b0">8.2 데이터의 분포 살펴보기</a></li>
287 :     <li><a name="toc-i1_002f4ie3_002ce31_002f4-i_0027ie3_002c-e2i-" href="#g_t_00ec_009d_00bc_00ed_0091_009c_00eb_00b3_00b8_00ea_00b3_00bc-_00ec_009d_00b4_00ed_0091_009c_00eb_00b3_00b8-_00ea_00b2_0080_00ec-_0095">8.3 일표본과 이표본 검정</a></li>
288 : gnustats 1203 </ul></li>
289 : gnustats 1252 <li><a name="toc-e_002a_002ce_00a31i_002c-e_00b0e3ue_0021_002c_002c-e_002a_002ce_007c_0021e3-i_00a1_00b0e_002b_002d_0027eP-i_0024_003fi" href="#Loops-and-conditional-execution-_0028_00eb_00b0_0098_00eb_00b3_00b5-_00eb_00b0_008f-_00ec_00a1_00b0_00ea_00b1_00b4_00eb_00b6_0080-_00ec_008b_00a4_00ed_0096_0089_0029">9 그룹화, 반복문, 그리고 조건부 실행</a>
290 : gnustats 1203 <ul class="no-bullet">
291 : gnustats 1252 <li><a name="toc-e_002a_002ce_00a31ie-ii" href="#g_t_00ea_00b7_00b8_00eb_00a3_00b9_00ed_0099_0094_00eb_0090_009c-_00ed_0091_009c_00ed_0098_0084">9.1 그룹화된 표현</a></li>
292 :     <li><a name="toc-i-i_0027e_0021_002c" href="#g_t_00ec-_009c_00ec_0096_00b4_00eb_00ac_00b8">9.2 제어문</a>
293 : gnustats 1203 <ul class="no-bullet">
294 : gnustats 1252 <li><a name="toc-i_00a1_00b0e_002b_002d_0027eP-i_0024_003fi_003a-if-e_0021_002c" href="#Conditional-execution">9.2.1 조건부 실행: <code>if</code> 문</a></li>
295 :     <li><a name="toc-e_00b0e3ui--i_0024_003fi_003a-foreY_003d1_002f4-i_0027i_00a9i-e_00b0e3u_002c-repeat-e_002a_002ce_007c_0021e3-while" href="#Repetitive-execution">9.2.2 반복적 실행: <code>for</code>를 이용한 반복, <code>repeat</code> 그리고 <code>while</code></a></li>
296 : gnustats 1203 </ul></li>
297 :     </ul></li>
298 : gnustats 1237 <li><a name="toc-Writing-your-own-functions-_0028i_0021i_00a9i-i-ii_0022i-ii_002b_002die_002c_00b0_0029" href="#Writing-your-own-functions-_0028_00ec_0082_00ac_00ec_009a_00a9_00ec_009e_0090-_00ec-_0095_00ec_009d_0098_00ed_0095_00a8_00ec_0088_0098-_00ec_009e_0091_00ec_0084_00b1_00ed_0095_0098_00ea_00b8_00b0_0029">10 Writing your own functions (사용자 정의함수 작성하기)</a>
299 : gnustats 1203 <ul class="no-bullet">
300 :     <li><a name="toc-e_00b0e_0022i-ii-" href="#g_t_00ea_00b0_0084_00eb_008b_00a8_00ed_0095_009c-_00ec_0098_0088_00ec-_009c">10.1 간단한 예제</a></li>
301 : gnustats 1254 <li><a name="toc-ie_00a1i_0027-i_0027ii_00b0i_00b0ieY_003d1_002f4-i-iie_002c_00b0" href="#g_t_00ec_0083_0088_00eb_00a1_009c_00ec_009a_00b4-_00ec_009d_00b4_00ed_0095_00ad_00ec_0097_00b0_00ec_0082_00b0_00ec_009e_0090_00eb_00a5_00bc-_00ec-_0095_00ec_009d_0098_00ed_0095_0098_00ea_00b8_00b0">10.2 새로운 이항연산자를 정의하기</a></li>
302 :     <li><a name="toc-i_002cie_00aa-e31_002f4-e_002c_00b0e3_002ce_00b0" href="#g_t_00ec_009d_00b8_00ec_009e_0090_00eb_00aa-_00ea_00b3_00bc-_00ea_00b8_00b0_00eb_00b3_00b8_00ea_00b0_0092">10.3 인자명과 기본값</a></li>
303 : gnustats 1203 <li><a name="toc-The-_2026-argument" href="#The-three-dots-argument">10.4 The &lsquo;<samp>&hellip;</samp>&rsquo; argument</a></li>
304 : gnustats 1254 <li><a name="toc-Assignments-within-functions" href="#g_t_00ed_0095_00a8_00ec_0088_0098_00eb_0082_00b4-_00ed_0095-_00eb_008b_00b9">10.5 Assignments within functions</a></li>
305 :     <li><a name="toc-iC_002f-e-e_00b0i-e-ii-e_0024_003f" href="#g_t_00ec_00a2_0080-_00eb_008d_0094-_00eb_00b0_009c_00ec-_0084_00eb_0090_009c-_00ec_0098_0088_00ec-_009c_00eb_0093_00a4">10.6 좀 더 발전된 예제들</a>
306 : gnustats 1203 <ul class="no-bullet">
307 :     <li><a name="toc-Efficiency-factors-in-block-designs-1" href="#Efficiency-factors-in-block-designs">10.6.1 Efficiency factors in block designs</a></li>
308 :     <li><a name="toc-Dropping-all-names-in-a-printed-array-1" href="#Dropping-all-names-in-a-printed-array">10.6.2 Dropping all names in a printed array</a></li>
309 :     <li><a name="toc-Recursive-numerical-integration-1" href="#Recursive-numerical-integration">10.6.3 Recursive numerical integration</a></li>
310 :     </ul></li>
311 : gnustats 1245 <li><a name="toc-Scope-_0028i_0024_003fi1_002f2i_0029" href="#Scope-_0028_00ec_008a_00a4_00ec_00bd_0094_00ed_0094_0084_0029">10.7 Scope (스코프)</a></li>
312 : gnustats 1254 <li><a name="toc-ie21_002f2-i_0024_003fi-ie_002c_00b0" href="#g_t_00ed_0099_0098_00ea_00b2_00bd-_00ec_0084_00a4_00ec-_0095_00ed_0095_0098_00ea_00b8_00b0">10.8 환경 설정하기</a></li>
313 : gnustats 1244 <li><a name="toc-i_0027ei_0024_003f_002c-i-e_0024_003fe_007c-i_0022i_002c-e_002a_002ce_007c_0021e3-e_00b0i2_0027iSSiY_003d-ie_00a1e_002a_002cee_00b0" href="#Object-orientation-_0028_00ea_00b0_009d_00ec_00b2_00b4_00ec_00a7_0080_00ed_0096_00a5_00ec-_0081-_00eb_00b0_00a9_00eb_00b2_0095_0029">10.9 클래스, 제네릭 함수, 그리고 객체지향 프로그래밍</a></li>
314 : gnustats 1203 </ul></li>
315 : gnustats 1245 <li><a name="toc-Statistical-models-in-R-_0028Rii-i_0021i_00a9ee-iue3e_00aa_0022ie_0024_003f_0029" href="#Statistical-models-in-R-_0028R_00ec_0097_0090_00ec_0084_009c-_00ec_0082_00ac_00ec_009a_00a9_00eb_0090_0098_00eb_008a_0094-_00ed_0086_00b5_00ea_00b3_0084_00eb_00aa_00a8_00ed_0098_0095_00eb_0093_00a4_0029">11 Statistical models in R (R에서 사용되는 통계모형들)</a>
316 : gnustats 1203 <ul class="no-bullet">
317 :     <li><a name="toc-Defining-statistical-models_003b-formulae" href="#g_t_00ec_008b_009d_0028formulae_0029_00ec_009d_0084-_00ed_0086_00b5_00ed_0095_009c-_00ed_0086_00b5_00ea_00b3_0084_00eb_00aa_00a8_00ed_0098_0095_00ec_009d_0098-_00ec-_0095_00ec_009d_0098">11.1 Defining statistical models; formulae</a>
318 :     <ul class="no-bullet">
319 :     <li><a name="toc-Contrasts-1" href="#Contrasts">11.1.1 Contrasts</a></li>
320 :     </ul></li>
321 :     <li><a name="toc-Linear-models-1" href="#Linear-models">11.2 Linear models</a></li>
322 : gnustats 1248 <li><a name="toc-Generic-functions-for-extracting-model-information-1" href="#Generic-functions-for-extracting-model-information">11.3 Generic functions for extracting model information</a></li>
323 : gnustats 1203 <li><a name="toc-Analysis-of-variance-and-model-comparison-1" href="#Analysis-of-variance-and-model-comparison">11.4 Analysis of variance and model comparison</a>
324 :     <ul class="no-bullet">
325 :     <li><a name="toc-ANOVA-tables-1" href="#ANOVA-tables">11.4.1 ANOVA tables</a></li>
326 :     </ul></li>
327 :     <li><a name="toc-Updating-fitted-models-1" href="#Updating-fitted-models">11.5 Updating fitted models</a></li>
328 :     <li><a name="toc-Generalized-linear-models-1" href="#Generalized-linear-models">11.6 Generalized linear models</a>
329 :     <ul class="no-bullet">
330 :     <li><a name="toc-Families-1" href="#Families">11.6.1 Families</a></li>
331 :     <li><a name="toc-The-glm_0028_0029-function-1" href="#The-glm_0028_0029-function">11.6.2 The <code>glm()</code> function</a></li>
332 :     </ul></li>
333 :     <li><a name="toc-Nonlinear-least-squares-and-maximum-likelihood-models-1" href="#Nonlinear-least-squares-and-maximum-likelihood-models">11.7 Nonlinear least squares and maximum likelihood models</a>
334 :     <ul class="no-bullet">
335 :     <li><a name="toc-Least-squares-1" href="#Least-squares">11.7.1 Least squares</a></li>
336 :     <li><a name="toc-Maximum-likelihood-1" href="#Maximum-likelihood">11.7.2 Maximum likelihood</a></li>
337 :     </ul></li>
338 :     <li><a name="toc-Some-non_002dstandard-models-1" href="#Some-non_002dstandard-models">11.8 Some non-standard models</a></li>
339 :     </ul></li>
340 : gnustats 1239 <li><a name="toc-Graphical-procedures" href="#Graphics-_0028_00ea_00b7_00b8_00eb_009e_0098_00ed_0094_00bd_00ec_008a_00a4_0029">12 Graphical procedures</a>
341 : gnustats 1203 <ul class="no-bullet">
342 :     <li><a name="toc-High_002dlevel-plotting-commands-1" href="#High_002dlevel-plotting-commands">12.1 High-level plotting commands</a>
343 :     <ul class="no-bullet">
344 :     <li><a name="toc-The-plot_0028_0029-function-1" href="#The-plot_0028_0029-function">12.1.1 The <code>plot()</code> function</a></li>
345 :     <li><a name="toc-Displaying-multivariate-data-1" href="#Displaying-multivariate-data">12.1.2 Displaying multivariate data</a></li>
346 :     <li><a name="toc-Display-graphics-1" href="#Display-graphics">12.1.3 Display graphics</a></li>
347 :     <li><a name="toc-Arguments-to-high_002dlevel-plotting-functions-1" href="#Arguments-to-high_002dlevel-plotting-functions">12.1.4 Arguments to high-level plotting functions</a></li>
348 :     </ul></li>
349 :     <li><a name="toc-Low_002dlevel-plotting-commands-1" href="#Low_002dlevel-plotting-commands">12.2 Low-level plotting commands</a>
350 :     <ul class="no-bullet">
351 :     <li><a name="toc-Mathematical-annotation-1" href="#Mathematical-annotation">12.2.1 Mathematical annotation</a></li>
352 :     <li><a name="toc-Hershey-vector-fonts-1" href="#Hershey-vector-fonts">12.2.2 Hershey vector fonts</a></li>
353 :     </ul></li>
354 :     <li><a name="toc-Interacting-with-graphics-1" href="#Interacting-with-graphics">12.3 Interacting with graphics</a></li>
355 :     <li><a name="toc-Using-graphics-parameters-1" href="#Using-graphics-parameters">12.4 Using graphics parameters</a>
356 :     <ul class="no-bullet">
357 :     <li><a name="toc-ieu_0021i-_0028permanent_0029-e3ii-ii-e_003a-par_0028_0029-i_0022i" href="#The-par_0028_0029-function">12.4.1 영구적(permanent) 변환을 원할 때: <code>par()</code> 함수</a></li>
358 :     <li><a name="toc-i_002cieY_003d1_002f4-i_0021i_00a9i-i1_002f4ii--e3i_0028Temporary-changes_003a-Arguments-to-graphics-functions_0029" href="#Arguments-to-graphics-functions">12.4.2 인자를 사용한 일시적 변환(Temporary changes: Arguments to graphics functions)</a></li>
359 :     </ul></li>
360 :     <li><a name="toc-Graphics-parameters-list" href="#Graphics-parameters">12.5 Graphics parameters list</a>
361 :     <ul class="no-bullet">
362 :     <li><a name="toc-e_002a_002cei1_002f2-iie_0024_003fi-ii_00a9_0028Graphical-elements_0029" href="#g_t_00ea_00b7_00b8_00eb_009e_0098_00ed_0094_00bd-_00ec_009a_0094_00ec_0086_008c_00eb_0093_00a4_00ec_009d_0098-_00ed_0099_009c_00ec_009a_00a9_0028Graphical-elements_0029">12.5.1 그래픽 요소들의 활용(Graphical elements)</a></li>
363 :     <li><a name="toc-Axes-and-tick-marks-1" href="#Axes-and-tick-marks">12.5.2 Axes and tick marks</a></li>
364 :     <li><a name="toc-Figure-margins-1" href="#Figure-margins">12.5.3 Figure margins</a></li>
365 :     <li><a name="toc-Multiple-figure-environment-1" href="#Multiple-figure-environment">12.5.4 Multiple figure environment</a></li>
366 :     </ul></li>
367 :     <li><a name="toc-Device-drivers-1" href="#Device-drivers">12.6 Device drivers</a>
368 :     <ul class="no-bullet">
369 :     <li><a name="toc-i_00a1_00b0i-e_0021_002cieY_003d1_002f4-ii-i_0021i_0024_003fi_002ci_0024_003fi_0021e_007c1_002f2i_002c-e_0024_003fi_0027i_0027e_002a_002ce_0022-ii_002b_002die_002c_00b0_0028PostScript-diagrams-for-typeset-documents_0029" href="#g_t_00ec_00a1_00b0_00ed_008c_0090-_00eb_00ac_00b8_00ec_0084_009c_00eb_00a5_00bc-_00ec_009c_0084_00ed_0095_009c-_00ed_008f_00ac_00ec_008a_00a4_00ed_008a_00b8_00ec_008a_00a4_00ed_0081_00ac_00eb_00a6_00bd_00ed_008a_00b8-_00eb_008b_00a4_00ec_009d_00b4_00ec_0096_00b4_00ea_00b7_00b8_00eb_009e_00a8-_00ec_0083_009d_00ec_0084_00b1_00ed_0095_0098_00ea_00b8_00b0_0028PostScript-diagrams-for-typeset-documents_0029">12.6.1 조판 문서를 위한 포스트스크립트 다이어그램 생성하기(PostScript diagrams for typeset documents)</a></li>
370 :     <li><a name="toc-Multiple-graphics-devices-1" href="#Multiple-graphics-devices">12.6.2 Multiple graphics devices</a></li>
371 :     </ul></li>
372 :     <li><a name="toc-Dynamic-graphics-1" href="#Dynamic-graphics">12.7 Dynamic graphics</a></li>
373 :     </ul></li>
374 : gnustats 1249 <li><a name="toc-Packages-_0028i_0022i_0024_003fiSS_0029" href="#Packages-_0028_00ed_008c_00a8_00ed_0082_00a4_00ec_00a7_0080_0029">13 Packages (패키지)</a>
375 : gnustats 1203 <ul class="no-bullet">
376 :     <li><a name="toc-ii_0024_003f-i_0022i_0024_003fiSSe_0024_003f-_0028Standard-packages_0029" href="#g_t_00ed_0091_009c_00ec_00a4_0080-_00ed_008c_00a8_00ed_0082_00a4_00ec_00a7_0080_00eb_0093_00a4-_0028Standard-packages_0029">13.1 표준 패키지들 (Standard packages)</a></li>
377 :     <li><a name="toc-i_0021i_00a9i_002de_002c_00b0i_0021-i_0022i_0024_003fiSS_0028Contributed-packages_0029i-CRAN" href="#Contributed-packages-and-CRAN">13.2 사용자-기여 패키지(Contributed packages)와 <acronym>CRAN</acronym></a></li>
378 :     <li><a name="toc-Namespaces-1" href="#Namespaces">13.3 Namespaces</a></li>
379 :     </ul></li>
380 : gnustats 1252 <li><a name="toc-i_0027ii2_0027i-i-e_002c_00b0eY_003de_0024_003fi-ei-i-e_002a1_002f4" href="#g_t_00ec_009a_00b4_00ec_0098_0081_00ec_00b2_00b4_00ec-_009c_00ec_009d_0098-_00ea_00b8_00b0_00eb_008a_00a5_00eb_0093_00a4_00ec_0097_0090-_00eb_008c_0080_00ed_0095_009c-_00ec-_0091_00ea_00b7_00bc">14 운영체제의 기능들에 대한 접근</a>
381 : gnustats 1203 <ul class="no-bullet">
382 :     <li><a name="toc-Files-and-directories-1" href="#Files-and-directories">14.1 Files and directories</a></li>
383 :     <li><a name="toc-Filepaths-1" href="#Filepaths">14.2 Filepaths</a></li>
384 :     <li><a name="toc-System-commands-1" href="#System-commands">14.3 System commands</a></li>
385 :     <li><a name="toc-Compression-and-Archives-1" href="#Compression-and-Archives">14.4 Compression and Archives</a></li>
386 :     </ul></li>
387 :     <li><a name="toc-A-sample-session-1" href="#A-sample-session">Appendix A A sample session</a></li>
388 : gnustats 1249 <li><a name="toc-Invoking-R-_0028Ri-i_0024_003fiie_002c_00b0_0029" href="#Invoking-R-_0028R_00ec_009d_0084-_00ec_008b_00a4_00ed_0096_0089_00ed_0095_0098_00ea_00b8_00b0_0029">Appendix B Invoking R (R을 실행하기)</a>
389 : gnustats 1203 <ul class="no-bullet">
390 :     <li><a name="toc-Invoking-R-from-the-command-line-1" href="#Invoking-R-from-the-command-line">B.1 Invoking R from the command line</a></li>
391 :     <li><a name="toc-Invoking-R-under-Windows-1" href="#Invoking-R-under-Windows">B.2 Invoking R under Windows</a></li>
392 :     <li><a name="toc-Invoking-R-under-OS-X-1" href="#Invoking-R-under-OS-X">B.3 Invoking R under OS X</a></li>
393 :     <li><a name="toc-Scripting-with-R-1" href="#Scripting-with-R">B.4 Scripting with R</a></li>
394 :     </ul></li>
395 : gnustats 1238 <li><a name="toc-The-command_002dline-editor-_0028e_00aa-e-1i_0027e1_002f4i_002c-i_002ciSSe_002c_00b0_0029" href="#The-command_002dline-editor-_0028_00eb_00aa-_00eb-_00b9_00ec_0096_00b4_00eb_009d_00bc_00ec_009d_00b8-_00ed_008e_00b8_00ec_00a7_0091_00ea_00b8_00b0_0029">Appendix C The command-line editor (명령어라인 편집기)</a>
396 : gnustats 1203 <ul class="no-bullet">
397 :     <li><a name="toc-Preliminaries" href="#Preliminaries">C.1 Preliminaries</a></li>
398 :     <li><a name="toc-Editing-actions" href="#Editing-actions">C.2 Editing actions</a></li>
399 :     </ul></li>
400 : gnustats 1252 <li><a name="toc-i_0022i-e_00b0-e3ii-e_0027e-_0022e-ii_002c" href="#g_t_00ed_0095_00a8_00ec_0088_0098-_00eb_00b0_008f-_00eb_00b3_0080_00ec_0088_0098_00ec_0099_0080-_00ea_00b4_0080_00eb-_00a8_00eb_0090_009c-_00ec_0083_0089_00ec_009d_00b8">Appendix D 함수 및 변수와 관련된 색인</a></li>
401 :     <li><a name="toc-e_00b0e-e31_002f4-e_0027e-_0022e-ii_002c" href="#g_t_00ea_00b0_009c_00eb-_0090_00ea_00b3_00bc-_00ea_00b4_0080_00eb-_00a8_00eb_0090_009c-_00ec_0083_0089_00ec_009d_00b8">Appendix E 개념과 관련된 색인</a></li>
402 : gnustats 1240 <li><a name="toc-References-_0028i_00b0_002ce3-e_0021_002ci_0029" href="#References-_0028_00ec_00b0_00b8_00ea_00b3-_00eb_00ac_00b8_00ed_0097_008c_0029">Appendix F References (참고문헌)</a></li>
403 : gnustats 1203 </ul>
404 :     </div>
405 :    
406 :    
407 : gnustats 1249 <a name="Top"></a>
408 : gnustats 1222 <a name="An-Introduction-to-R-_0028translated-in-Korean_0029"></a>
409 :     <h1 class="top">An Introduction to R (translated in Korean)</h1>
410 : gnustats 1203
411 : gnustats 1220 <p>이 문서는 통계 컴퓨팅(statistical computing)과 그래픽(graphics) 작업을 위한 언어(language)이자
412 :     환경(environment)이기도 한 통계소프트웨어 R (&ldquo;GNU S&rdquo;)에 대한 소개를 담고 있습니다. R은 벨연구소(Bell
413 :     laboratory)에서 ì¡´ 챔버스(John Chambers)와 그의 동료들에 의하여 개발되고 ACM 소프트웨어 시스템
414 :     상<a name="DOCF1" href="#FOOT1"><sup>1</sup></a>을 받은바 있는 S
415 :     시스템과 유사합니다. 이것은 선형 및 비선형 모델링(linear and non-linear modelling), 통계적
416 :     검정(statistical tests), 시계열분석(time series analysis), 통계적
417 :     분류기법(classification), 군집분석(clustering)ê³¼ 같은 다양한 종류의 통계적 기법들과 그래픽 기능들을 제공합니다.
418 : gnustats 1203 </p>
419 : gnustats 1220 <p>이 문서에서는 데이터형(data type), 프로그래밍 기본요소들(programming elements), 그리고 통계
420 :     모델링(statistical modelling) 및 그래픽(graphics)에 대한 내용을 다룹니다.
421 : gnustats 1203 </p>
422 : gnustats 1291 <p>이 매뉴얼은 R Revision: 67332 (3.2.0 Under development (unstable))을 위하여 작성되었습니다.
423 : gnustats 1203 </p>
424 :     <p>Copyright &copy; 1990 W. N. Venables<br> Copyright &copy; 1992
425 :     W. N. Venables &amp; D. M. Smith<br> Copyright &copy; 1997 R.
426 :     Gentleman &amp; R. Ihaka<br> Copyright &copy; 1997, 1998 M. Maechler<br>
427 :     Copyright &copy; 1999&ndash;2014 R Core Team
428 :     </p>
429 :     <blockquote>
430 :     <p>Permission is granted to make and distribute verbatim copies of this
431 :     manual provided the copyright notice and this permission notice are
432 :     preserved on all copies.
433 :     </p>
434 :     <p>Permission is granted to copy and distribute modified versions of this
435 :     manual under the conditions for verbatim copying, provided that the
436 :     entire resulting derived work is distributed under the terms of a
437 :     permission notice identical to this one.
438 :     </p>
439 :     <p>Permission is granted to copy and distribute translations of this manual
440 :     into another language, under the above conditions for modified versions,
441 :     except that this permission notice may be stated in a translation
442 :     approved by the R Core Team.
443 : gnustats 1213 </p></blockquote>
444 : gnustats 1203
445 : gnustats 1222
446 : gnustats 1219 <p><strong>NOTE</strong> from the maintainer Chel Hee Lee &lt;<a href="mailto:chl948@mail.usask.ca">chl948@mail.usask.ca</a>&gt;
447 : gnustats 1203 </p>
448 : gnustats 1291 <p>This translation is updated on a day-by-day basis (Tue Jan 6 01:17:00 CST 2015). The initial work was done with R-2.7.2 (25-AUG-2008) by Chel Hee Lee. The latest version is based on the Revision: 67332 (3.2.0 Under development (unstable)).
449 : gnustats 1214 </p>
450 : gnustats 1216 <p>This work is a result of cumulative efforts made by the contributors listed in the below:
451 : gnustats 1214 </p><ul>
452 : gnustats 1229 <li> Chel Hee Lee &lt;<a href="mailto:chl948@mail.usask.ca">chl948@mail.usask.ca</a>&gt;, University of Saskatchewan, Saskatoon, Saskatchewan, Canada, 2008&ndash;2014
453 : gnustats 1222 </li><li> Lijin Joo &lt;<a href="mailto:lijin.joo@nyu.edu">lijin.joo@nyu.edu</a>&gt;, New York University, New York, New York, U.S.A., 2009, 2012, 2013
454 :     </li><li> Heather Kim &lt;<a href="mailto:heatherkimca@gmail.com">heatherkimca@gmail.com</a>&gt;, University of Manitoba, Canada, 2009, 2012, 2013.
455 :     </li><li> Johan Jung &lt;<a href="mailto:jungyha@gmail.com">jungyha@gmail.com</a>&gt;, Pacific Biological Station, Department of Fisheries and Ocean, Canada, 2011, 2013.
456 :     </li><li> Woo June Jung &lt;<a href="mailto:whitelog6@gmail.com">whitelog6@gmail.com</a>&gt;, Hongik University, Seoul, Korea, 2009, 2013.
457 :     </li><li> Seyeon Lee &lt;<a href="mailto:mandooms@gmail.com">mandooms@gmail.com</a>&gt;, Ewha Women&rsquo;s University, Seoul, Korea, 2009.
458 : gnustats 1213 </li></ul>
459 : gnustats 1225
460 :     <p>If you wish to voluntarily participate in this translation project, please visit the page at <a href="http://r-forge.r-project.org/projects/ihelp/">http://r-forge.r-project.org/projects/ihelp/</a>
461 : gnustats 1235 </p>
462 : gnustats 1219
463 : gnustats 1203
464 :    
465 :    
466 :     <hr>
467 : gnustats 1251 <a name="g_t_00ec_0084_009c_00eb_00ac_00b8"></a>
468 :     <a name="ie_0021_002c"></a>
469 :     <h2 class="unnumbered">서문</h2>
470 : gnustats 1203
471 :     <p>원래 R에 대한 이 안내서는 1990년부터 1992년 사이에 Bill Venables와 David M. Smith가 Adelaide
472 :     대학에서 S와 <small>S-PLUS</small>에 대하여 작성한 노트를 토대로 하고 있습니다. 그러나, 이 문서에서는 Rê³¼ S 사이의
473 :     다른 점들을 반영하기 위하여 원래 노트의 내용에 적절한 수정을 가하고 일부 내용들을 더욱 보강하였습니다.
474 :     </p>
475 :     <p>이렇게 원래의 노트에 대한 수정과 재배포를 허락하고, R을 지지해주신 Bill Venables(그리고 David Smith)에게
476 :     깊은 감사의 뜻을 전합니다.
477 :     </p>
478 :     <p>Comments and corrections are always welcome. Please address email
479 :     correspondence to <a href="mailto:R-core@R-project.org">R-core@R-project.org</a>.
480 :     </p>
481 : gnustats 1252 <a name="i1_002f2e_002c_00b0i--e-ie_0024_003fie2-ee_007c_0021e-eSSi"></a>
482 :     <h4 class="subheading">읽기전 독자들에게 드리는 말씀</h4>
483 : gnustats 1203
484 :     <p>지금 이 글을 읽고 계신 분이 혹시 R을 처음 접하는 분이라면 R이 어떻게 작동하는가를 좀 더 쉽게 익히기 위해
485 : gnustats 1235 Appendix A을 먼저 살펴보시길 권장 합니다.
486 : gnustats 1203 </p>
487 :     <p>특히, 적지 않은 분들의 경우 R의 우수한 그래픽 기능 때문에 R을 사용하실 것 입니다. 이러한 분들을 위해 그래픽에 관련된
488 : gnustats 1239 주제들은 See <a href="#Graphics-_0028_00ea_00b7_00b8_00eb_009e_0098_00ed_0094_00bd_00ec_008a_00a4_0029">Graphics (그래픽스)</a> 챕터에 따로 모았으니 문서 전체의 내용을 순서대로 따라갈 필요없이 필요한 내용만 쉽게
489 : gnustats 1235 찾아 보실 수 있을 것입니다.
490 : gnustats 1203 </p>
491 :    
492 :     <hr>
493 : gnustats 1251 <a name="g_t_00ec_0086_008c_00ea_00b0_009c-_00eb_00b0_008f-_00eb_00af_00b8_00eb_00a6_00ac-_00ec_0095_008c_00ec_0095_0084_00eb_0091_0090_00ec_0096_00b4_00ec_0095_00bc-_00ed_0095-_00eb_0082_00b4_00ec_009a_00a9"></a>
494 :     <a name="ie_00b0-e_00b0-e_002d_002ce_007c_0021-iiei_0027i1_002f4-i-e_0027i_00a9"></a>
495 :     <h2 class="chapter">1 소개 및 미리 알아두어야 할 내용</h2>
496 : gnustats 1203
497 :    
498 :     <hr>
499 : gnustats 1251 <a name="R_00ec_009d_0098-_00ed_0099_0098_00ea_00b2_00bd-_0028_00ec_009d_00b8_00eb_00b0_0094_00ec_009d_00b4_00eb_009f_00b0_00eb_00a8_00bc_00ed_008a_00b8-_00eb_0098_0090_00eb_008a_0094-environment_0029"></a>
500 :     <a name="Ri-ie21_002f2-_0028i_002ce_00b0i_0027e_00b0e_00221_002f4i_002c-ee-environment_0029"></a>
501 :     <h3 class="section">1.1 R의 환경 (인바이런먼트 또는 environment)</h3>
502 : gnustats 1203
503 :     <p>R은 데이터의 조작 및 수치연산, 그리고 시각화를 수행할 수 있는 소프트웨어 기능들을 한데 모아놓은 통합 개발환경이라고 할 수
504 :     있으며, 다음과 같은 기능들을 수행하는데 특히 강점을 보입니다.
505 :     </p>
506 :     <ul>
507 :     <li> an effective data handling and storage facility,
508 :     </li><li> a suite of operators for calculations on arrays, in particular matrices,
509 :     </li><li> a large, coherent, integrated collection of intermediate tools for data
510 :     analysis,
511 :     </li><li> graphical facilities for data analysis and display either directly at the
512 :     computer or on hardcopy, and
513 :     </li><li> 조건문, 반복문, 사용자 정의 함수, 그리고 표준 입출력과 관련된 기능들 다룰 수 있는 이 언어는 &rsquo;S&rsquo; 이라고 불리우며 사용이
514 :     단순하면서도 효율적이도록 개발되었습니다(실제로 R 시스템의 대다수의 함수들은 S언어로 작성 되었습니다)
515 :     </li></ul>
516 :    
517 :     <p>인바이런먼트(&ldquo;environment&rdquo;, 환경)라는 용어는 특정 기능만을 수행하기 위해 개발된 도구들을 계속 더해서 기능을 확장하는
518 :     대부분의 통계 분석 소트웨어와는 다르게 R은 하나의 시스템으로 미리 계획적이고 일관성 있게 개발 되었음을 드러내기 위해 사용되었습니다.
519 :     </p>
520 :     <p>R은 시스템과 분석자가 서로 대화하는 과정을 통해 데이터를 분석하고, 또 이러한 분석에 필요한 새로운 방법들을 개발하는데 사용하는
521 :     수단이라고 ë³¼ 수 있습니다. R은 그동안 빠르게 발전해왔고, 수 많은 <em>package</em>(패키지)들의 모음으로 ê·¸ 기능을
522 :     확장시켜 왔습니다. 하지만, R로 작성된 대부분의 프로그램들은 사용자에게 주어진 하나의 구체적인 데이터를 분석하기 위해서 작성되는
523 :     것이므로 대부분의 경우 다시 사용할 수 없습니다.
524 :     </p>
525 :     <hr>
526 : gnustats 1251 <a name="g_t_00ec_0097_00b0_00ea_00b4_0080_00eb_0090_009c-_00ec_0086_008c_00ed_0094_0084_00ed_008a_00b8_00ec_009b_00a8_00ec_0096_00b4-_00eb_00b0_008f-_00eb_00ac_00b8_00ec_0084_009c_00eb_0093_00a4"></a>
527 :     <a name="i_00b0e_0027e-iii_002ci_0022i_0027-e_00b0-e_0021_002cie_0024_003f"></a>
528 :     <h3 class="section">1.2 연관된 소프트웨어 및 문서들</h3>
529 : gnustats 1203
530 :     <p>여러분은 R을 Bell 연구소에서 근무하던 Rick Becker, John Chambers 그리고 Allan Wilks가
531 :     <small>S-PLUS</small> 시스템의 구축을 위해 개발한 S 라는 언어를 다른 형태로 실행시킨 것이라고 생각하셔도 좋을 것입니다.
532 :     </p>
533 :     <p>이 S 언어의 진화과정은 John Chambers와 그의 동료들이 쓴 네 권의 책에 의해서 잘 정리되어 있습니다. 만약, 여러분이
534 :     R의 가장 기본적인 참고자료를 원하시면 Richard A. Becker, John M. Chambers 그리고 Allan
535 :     R. Wilks가 저술한 <em>The New S Language: A Programming Environment for
536 :     Data Analysis and Graphics</em>라는 책을 찾아보실 것을 권합니다. 1991년 버전에 추가된 S의 새로운 기능들에
537 :     대해서는 John M. Chambers와 Trevor J. Hastie가 편집한 <em>Statistical Models in
538 :     S</em> 라는 책을 참고하시길 바랍니다. <strong>methods</strong> 패키지에 구현되어 있는 method(메소드)와
539 :     class(클래스)들은 John M. Chambers가 저술한 <em>Programming with Data</em>에서 찾아 ë³¼ 수
540 : gnustats 1240 있으며, 더 구체적인 내용을 원하시면 링크된 참고자료들을 See <a href="#References-_0028_00ec_00b0_00b8_00ea_00b3-_00eb_00ac_00b8_00ed_0097_008c_0029">References (참고문헌)</a> 살펴보시길 바랍니다.
541 : gnustats 1203 </p>
542 :     <p>이미 시중에 R을 이용한 데이터 분석과 통계학에 관련된 많은 서적들이 나와 있습니다. 또한, S/<small>S-PLUS</small>를 위해
543 :     작성된 문서들을 참고하는 것 역시 R을 사용하시는데 도움이 될 것입니다. 그러나, 여러분은 반드시 S ê³¼ R 은 서로
544 : gnustats 1222 다른 언어라는 점을 기억하셔야 합니다. 더 자세한 사항은 See <a href="R-FAQ.html#What-documentation-exists-for-R_003f">What documentation exists for R?</a> in <cite>The R statistical system FAQ</cite>를 참고해주시길 바랍니다.
545 : gnustats 1203 </p>
546 :     <hr>
547 : gnustats 1251 <a name="R_00ea_00b3_00bc-_00ed_0086_00b5_00ea_00b3_0084"></a>
548 :     <a name="Re31_002f4-iue3"></a>
549 :     <h3 class="section">1.3 Rê³¼ 통계</h3>
550 : gnustats 1249 <a name="index-Packages-_0028i_0022i_0024_003fiSS_0029"></a>
551 : gnustats 1203
552 :     <p>R 환경(environment)에 대한 본 안내서는 <em>statistics</em>(통계학) 자체를 설명하기 위해 작성된 것은
553 :     아니지만, 이미 많은 독자 여러분이 R을 통계 시스템으로 사용하고 있습니다. 여기에 더해, 저희는 여러분이 R 이라는 시스템이
554 :     과거로부터 현재에 이르기까지 개발되어 온 수많은 통계적 방법들을 사용할 수 있도록 해주는 하나의 환경으로 생각해주셨으면 합니다. 이러한
555 :     많은 방법들 중 일부는 R의 기본 환경 안에 이미 포함되어 있으나, 대부분은 <em>packages</em>(패키지)를 통해 사용
556 :     가능 합니다. 기본적으로 R 은 &ldquo;standard&rdquo;(표준) 혹은 &ldquo;recommended&rdquo;(권장 또는 추천)패키지라고 불리는
557 :     총 25개의 패키지들이 포함된 채로 설치 됩니다. ê·¸ 외의 패키지들은 <acronym>CRAN</acronym>이라는 인터넷 저장소를 통해서 찾을 수
558 :     있으며, 이 저장소의 주소는 <a href="http://CRAN.R-project.org">http://CRAN.R-project.org</a>)입니다. 패키지에 대한 더 자세한 내용은
559 : gnustats 1250 (see <a href="#Packages-_0028_00ed_008c_00a8_00ed_0082_00a4_00ec_00a7_0080_0029">Packages (패키지)</a>)에서 찾아볼 수 있습니다.
560 : gnustats 1203 </p>
561 :     <p>가장 고전적인 통계 방법부터 최근에 개발된 것까지 거의 모든 통계적 방법들이 R에서 사용될 수 있으나, 사용자의 목적에 맞는 적절한
562 :     패키지를 찾는 것은 여러분 스스로의 몫 입니다.
563 :     </p>
564 :     <p>또한, 여러분은 S (이 문서에서는 R)은 다른 주요 통계 시스템들과 분석 결과물을 출력하는 방식이 다르다는 점을 알고
565 :     계셔야 합니다. S에서는 통계적 분석을 일련의 절차로써 수행하게 되는데, 각 과정마다 얻어진 결과물들을 객체로써 저장 됩니다. 즉
566 :     SAS 또는 SPSS와 같은 분석도구로 회귀분석 또는 판별분석을 수행하면 분석 과정 중에 생성된 모든 결과가 한번에 출력되는 반면,
567 :     R은 최소한의 결과값 만을 제공하므로 더 자세한 중간분석결과 및 수행과정을 확인하고 싶다면 다른 함수를 추가로 사용해야 합니다.
568 :     </p>
569 :     <hr>
570 : gnustats 1251 <a name="R_00ea_00b3_00bc-_00ec_009c_0088_00eb_008f_0084_00ec_009a_00b0-_00ec_008b_009c_00ec_008a_00a4_00ed-_009c"></a>
571 :     <a name="Re31_002f4-iei_00b0-ii_0024_003fi-"></a>
572 :     <h3 class="section">1.4 Rê³¼ 윈도우 시스템</h3>
573 : gnustats 1203
574 :     <p>R을 사용하는 가장 손쉬운 방법은 윈도잉 시스템(windowing sytem, 즉 여러개의 창을 띄어줄 수 있는 시스템)을 사용하는
575 :     그래픽 워크스테이션을 이용하는 것입니다. 본 문서는 이러한 기능을 사용할 수 있는 분들을 위해서 작성 되었습니다. 주로 X 윈도우
576 :     시스템(유닉스와 같은 운영체제에서 사용하는 윈도윙 시스템의 이름)에서 R을 사용하는 방법을 위주로 서술하게 되겠지만, 이러한
577 :     설명들은 R을 실행할 수 있는 다른 체제에서도 동일하게 적용될 수 있습니다.
578 :     </p>
579 :     <p>대부분의 사용자들이 작업을 위해 여러분의 컴퓨터의 운영체제와 직접 상호작용을 해야 할 필요가 있을 것 입니다. 본 문서에서는 여러분이
580 :     UNIX로 작업한다고 가정하고 있습니다. 만약 여러분이 주로 Windows 혹은 Mac에서 R을 사용하신다면, 여기서 설명하는
581 :     방법들과 다소 차이가 있을 수 있다는 점을 기억하시기 바랍니다.
582 :     </p>
583 :     <p>이러한 각각의 환경에서 최적화된 성능의 R을 사용하기 위해서는 약간의 기술적인 설정이 요구되지만, 본 문서에서는 이러한 내용들을
584 :     다루지 않을 것입니다. 만약, 이러한 조정이 어려운 분이라면 주변 전문가에게 도움을 요청하시길 바랍니다.
585 :     </p>
586 :     <hr>
587 : gnustats 1251 <a name="R_00ec_009d_0084-_00eb_008c_0080_00ed_0099_0094_00ec_008b_009d_00ec_009c_00bc_00eb_00a1_009c-_00ec_0082_00ac_00ec_009a_00a9_00ed_0095_0098_00ea_00b8_00b0"></a>
588 :     <a name="Ri-eiii1_002f4e_00a1-i_0021i_00a9ie_002c_00b0"></a>
589 :     <h3 class="section">1.5 R을 대화식으로 사용하기</h3>
590 : gnustats 1203
591 :     <p>R 은 대화형 프로그램이라, 프로그램을 실행시키면 사용자의 입력을 기다리는 표시 &lsquo;<samp><code>&gt;</code></samp>&rsquo;(프롬프트)가 시작
592 :     됩니다. 이 표시는 UNIX에서의 쉘 프롬프트와도 동일하다고 ë³¼ 수 있는데, 사용자가 원하면 R의 프롬프트를 다른 모양으로 변경하는
593 :     것도 가능합니다. 본 문서에서는 내용의 명확성을 위해서 UNIX의 쉘 프롬프트는 &lsquo;<samp><code>$</code></samp>&rsquo; (스트링)이라는 기호를
594 :     이용하여 따로 표시 하겠습니다.
595 :     </p>
596 :     <p>UNIX에서 R 을 사용하기 위해서는 아래 명령문을 따라하시면 됩니다.
597 :     </p>
598 :     <ol>
599 :     <li> 우선 아래의 코드와 같이 R에서 사용할 데이터 파일들을 불러들일 장소인 <samp>work</samp>라는 별도의 디렉토리를 생성
600 :     합니다. R에서는 이 디렉토리 내에 데이터를 두고 분석을 수행하게 되는데, 이를 working directory (워킹 디렉토리 또는
601 :     작업 디렉토리)라고 합니다.
602 :    
603 :     <div class="example">
604 :     <pre class="example">$ mkdir work
605 :     $ cd work
606 :     </pre></div>
607 :    
608 :     </li><li> 아래의 명령어를 입력하면 R 프로그램이 시작됩니다.
609 :    
610 :     <div class="example">
611 :     <pre class="example">$ R
612 :     </pre></div>
613 :    
614 :     </li><li> 이제부터 R 에서 제공되는 명령어들을 이용하여 작업을 할 수 있습니다.
615 :    
616 :     </li><li> 아래의 명령어를 이용하면 R 프로그램을 종료 할 수 있습니다.
617 :    
618 :     <div class="example">
619 :     <pre class="example">&gt; q()
620 :     </pre></div>
621 :    
622 :     <p>이때, R 프로그램은 현재 R 세션에서 작업하던 데이터를 저장할 것인지에 대한 여부를 <kbd>yes</kbd> (예),
623 :     <kbd>no</kbd> (아니요) 혹은 프로그램 종료를 <kbd>cancel</kbd> (취소)하고 다시 R 세션으로 돌아갈 것인지를
624 :     확인합니다.이러한 메시지는 일부 시스템에서는 대화창으로 뜨기도 하고, 종료 명령어 다음 줄에 일반 텍스트로 나타날 수도 있습니다.만약,
625 :     저장을 선택하면 데이터는 워킹 디렉토리에 저장이 되고, 다음번에 R을 실행할 때 저장된 데이터를 불러와서 다시 사용할 수 있습니다.
626 :     </p>
627 :     </li></ol>
628 :    
629 :     <p>이렇게 R 프로그램을 종료 한 뒤 새로운 R 세션을 시작하는 것은 간단합니다.
630 :     </p>
631 :     <ol>
632 :     <li> 위에서 했던 것 처럼 다시 <samp>work</samp>이라는 작업 (또는 워킹) 디렉토리를 만들고 R 명령어를 입력하면 됩니다.
633 :    
634 :     <div class="example">
635 :     <pre class="example">$ cd work
636 :     $ R
637 :     </pre></div>
638 :    
639 :     </li><li> 이렇게 실행시킨 R 프로그램은 사용하고 난 뒤에, 마지막에 <code>q()</code> 명령어를 이용하여 종료할 수도 있습니다.
640 :    
641 :     </li></ol>
642 :    
643 :     <p>Windows에서 R을 사용하는 방법은 기본적으로 UNIX에서의 R 사용 방법과 동일합니다. 먼저 워킹 디렉토리에 해당하는 폴더를
644 :     생성하고, <samp>Start In</samp> 메뉴에서 R 바로가기를 바탕화면에 생성합니다.그리고, 이 바탕화면의 바로가기 아이콘을 더블
645 :     클릭하면 R을 실행시킬 수 있습니다.
646 :     </p>
647 : gnustats 1251 <a name="ie_00b0-i_002ci-"></a>
648 :     <h3 class="section">1.6 소개 세션</h3>
649 : gnustats 1203
650 : gnustats 1235 <p>R에 좀 더 빠르게 적응하고 싶은 분이라면 <a href="#A-sample-session">A sample session</a>에 있는 코드들을 따라 입력해 보고 어떤 결과가
651 :     출력되는지 확인하는 과정을 통해 R이 대강 어떤 식으로 작동하는지를 먼저 이해하시는 것이 도움이 될 것입니다.
652 : gnustats 1203 </p>
653 :     <hr>
654 : gnustats 1251 <a name="g_t_00eb_008f_0084_00ec_009b_0080_00eb_00a7_0090-_00ea_00b8_00b0_00eb_008a_00a5-_00ec_0082_00ac_00ec_009a_00a9_00ed_0095_0098_00ea_00b8_00b0"></a>
655 :     <a name="i_0022ii-i_0027i-e_002c_00b0eY_003di-ei-eieSS-i_0021i_00a9ie_002c_00b0"></a>
656 :     <h3 class="section">1.7 함수와 이의 기능에 대한 도움말 사용하기</h3>
657 : gnustats 1203 <a name="index-help"></a>
658 :    
659 :     <p>R은 UNIX에서 <code>man</code> 명령어를 이용하여 도움말을 찾는 것과 유사한 기능을 제공하고 있습니다.예를 들어,
660 :     <code>solve</code> 라는 이름을 가진 함수가 어떤 기능을 가지고 있고, 이를 어떻게 사용하는지 알고 싶다면 아래와 같이
661 :     <code>help</code> 라는 명령어를 사용할 수 있습니다.
662 :     </p>
663 :     <div class="example">
664 :     <pre class="example">&gt; help(solve)
665 :     </pre></div>
666 :     <a name="index-help-1"></a>
667 :    
668 :     <p>아래와 같은 방법으로도 동일한 도움말 기능을 이용할 수 있습니다.
669 :     </p>
670 :     <div class="example">
671 :     <pre class="example">&gt; ?solve
672 :     </pre></div>
673 :     <a name="index-_003f"></a>
674 :    
675 :     <p>어떤 경우에는 함수명이 아닌 special character (특수문자)에 대해서 알고 싶을 수도 있을 것 입니다. 이러한 특수문자의
676 :     기능을 알고 싶다면 반드시 아래와 같이 특수문자를 큰 따옴표 혹은 작은 따옴표와 함께 사용하여 &ldquo;character
677 :     string(문자열)&rdquo;의 형식을 갖춰야 해당 문자에 대한 검색이 가능합니다.이러한 형식은 <code>if</code>, <code>for</code> 그리고
678 :     <code>function</code> ê³¼ 같은 R 의 구문(syntax)적 의미를 검색할 때도 필요합니다.
679 :     </p>
680 :     <div class="example">
681 :     <pre class="example">&gt; help(&quot;[[&quot;)
682 :     </pre></div>
683 :    
684 :     <p>일반적으로 두 가지 종류의 따옴표를 모두 이용할 수 있으나, 큰 따옴표를 사용하는 것을 주로 권장하는 데, ê·¸ 이유는
685 :     <code>&quot;It's important&quot;</code> 와 같이 작은 따옴표가 문자열 내에서 쓰일 수도 있기 때문입니다.
686 :     </p>
687 :     <p>대부분의 경우 R 을 설치할때 <acronym>HTML</acronym> 도움말이 함께 설치되며, 아래와 같이 <code>help.start</code> 함수를 이용하여
688 :     이를 사용할 수 있습니다.
689 :     </p>
690 :     <div class="example">
691 :     <pre class="example">&gt; help.start()
692 :     </pre></div>
693 :     <a name="index-help_002estart"></a>
694 :    
695 :     <p>위의 함수를 입력하면, 하이퍼링크로 연결된 도움말 페이지들을 검색할 수 있는 <acronym>HTML</acronym> 기반의 도움말 시스템을 이용할 수 있도록
696 :     웹브라우저가 실행됩니다.<code>help.start()</code> 를 실행하면 나타나는 초기 페이지에 있는 &rsquo;Search Engine and
697 :     Keywords&rsquo;라는 링크는 사용 가능한 함수의 리스트 함께 검색어의 상위 개념(high-level concept)을 포함하기 때문에
698 :     매우 유용합니다. 이 링크를 사용하면 본인의 R시스템에 대한 이해의 정도와 현재 R 내에서 이용가능한 기능들을 확인하는데 큰
699 :     도움이 될 것 입니다.
700 :     </p>
701 :     <a name="index-help_002esearch"></a>
702 :     <p>명령어 (또 다른 표현으로 <code>??</code>)를 이용하면 더욱 다양한 방법으로 도움말을 검색하는 것이 가능합니다. 아래와 같은 명령문을
703 :     입력해보고 이렇게 검색하는 것이 어떤 식으로 다른지 확인할 수 있을 것 입니다.
704 :     </p>
705 :     <div class="example">
706 :     <pre class="example">&gt; ??solve
707 :     </pre></div>
708 :     <a name="index-_003f_003f"></a>
709 :    
710 :     <p>같은 함수를 더 자세히 알고 싶다면 <code>?help.search</code>를 이용하여 도움말을 확인하시기 바랍니다.
711 :     </p>
712 :     <p>The examples on a help topic can normally be run by
713 :     </p>
714 :     <div class="example">
715 :     <pre class="example">&gt; example(<var>topic</var>)
716 :     </pre></div>
717 :     <a name="index-example"></a>
718 :    
719 :     <p>Windows에서 실행되는 R 에서는 다른 방법으로도 도움말을 찾을 수 있습니다.
720 :     </p>
721 :     <div class="example">
722 :     <pre class="example">&gt; ?help
723 :     </pre></div>
724 :    
725 :     <p>for further details.
726 :     </p>
727 :     <hr>
728 : gnustats 1251 <a name="R-_00eb_00aa-_00eb-_00b9_00ec_0096_00b4-_00eb_00b0_008f-_00eb_008c_0080_00ec_0086_008c_00eb_00ac_00b8_00ec_009e_0090_00ec_009d_0098-_00ea_00b5_00ac_00eb_00b6_0084_00ea_00b3_00bc-_00ea_00b0_0099_00ec_009d_0080-_00eb_0082_00b4_00ec_009a_00a9_00eb_0093_00a4"></a>
729 :     <a name="R-e_00aa-e-1i_0027-e_00b0-eie_0021_002cii-eu_0021ePe31_002f4-e_00b0i-e_0027i_00a9e_0024_003f"></a>
730 :     <h3 class="section">1.8 R 명령어 및 대소문자의 구분과 같은 내용들</h3>
731 : gnustats 1203
732 :     <p>테크니컬한 측면에서 R을 설명하면 아주 단순한 문법을 가진 <em>expression language</em>(표현언어)라고 할 수
733 :     있습니다. 여기서 표현언어란 expression(표현식 = 수학에서의 수식을 의미함)을 기초로 하는 언어를 의미하며, 이는 데이터 값을
734 :     출력하는데 사용하는 방법들 중 하나입니다. R은 UNIX를 기반으로 하는 다른 패키지들과 같이 <em>case
735 :     sensitive</em>(케이스 센서티브 = 대소문자를 구별)하므로, <code>A</code> 와 <code>a</code> 는 서로 다른 기호로 인식되어 다른
736 :     변수로 사용된다는 점을 기억하셔야 합니다. R 에서 사용할 수 있는 기호들은 사용자의 운영체제 및 <em>locale</em>(로케일
737 :     = 운영체제에서 언어설정과 관계되어 사용자의 국가설정을 하는 기능을 의미함)에 따라 달라질 수 있습니다. 일반적으로 모든 알파벳 기호들
738 : gnustats 1220 <a name="DOCF2" href="#FOOT2"><sup>2</sup></a>을 사용할 수 있으며, 일부국가에서만 사용되는 특수문자들 역시 사용 가능
739 : gnustats 1203 합니다. 또한, &lsquo;<samp><code>.</code></samp>&rsquo; 와 &lsquo;<samp><code>_</code></samp>&rsquo; 을 함께 조합하여 사용하는 것도 가능합니다. 그러나,
740 :     표현식을 작성할 때에는 문장을 &lsquo;<samp><code>.</code></samp>&rsquo; 또는 문자로만 시작할 수 있습니다. 만약 표현식이 &lsquo;<samp><code>.</code></samp>&rsquo;
741 :     로 시작되었다면, 표현식의 두번째 문자는 반드시 숫자가 아닌 문자가 사용되어야 합니다. R 2.13.0 이전버전들은 표현식의 길이가
742 :     256바이트를 넘을 수 없었으나, 현재는 제약이 없습니다.
743 :     </p>
744 :     <p>Elementary commands consist of either <em>expressions</em> or
745 :     <em>assignments</em>. If an expression is given as a command, it is
746 :     evaluated, printed (unless specifically made invisible), and the value is
747 :     lost. An assignment also evaluates an expression and passes the value to a
748 :     variable but the result is not automatically printed.
749 :     </p>
750 :     <p>명령문 (command 또는 명령)이라는 것은 <em>expressions</em>(표현식)ê³¼ <em>assignment</em>(할당)이라는
751 :     두가지 요소로 구성됩니다. 만약 표현식이 할당 없이 홀로 사용되게 된다면, 이는 단순 명령어로 처리되어 (따로 결과가 출력되지 않도록
752 :     지정한 것이 아니면) ê·¸ 결과가 자동으로 출력된 뒤, ê·¸ 값은 어디에도 저장되지 않고 사라집니다. 반면, 할당의 경우는 표현식을
753 :     처리해서 ê·¸ 값을 지정된 변수에 보낼 뿐, 이 결과는 자동으로 출력하지는 않습니다.일반적으로 여러 개의 명령문들을 구분하기 위해
754 :     세미콜론(&lsquo;<samp><code>;</code></samp>&rsquo;)을 사용하거나 또는 각 줄에 다른 명령어를 입력 합니다. 기본적인 명령문들은 한 쌍의 열린 중괄호
755 :     &lsquo;<samp><code>{</code></samp>&rsquo; 와 하나의 닫힌 중괄호 &lsquo;<samp><code>}</code></samp>&rsquo; 에 의해 하나의 그룹으로 묶일 수 있습니다. 이렇게
756 :     그룹화된 표현식을 compound expression(복합 표현식)이라고 합니다. 해쉬마크 (&lsquo;<samp><code>#</code></samp>&rsquo;)로 시작하는
757 :     <em>Comments</em> (주석)은 해쉬마크가 있는 곳으로부터 해당 행 (또는 라인)의 끝까지 적용되는 것으로 입력된 결과는 처리되지
758 :     않고 단지 사용자에게 추가적인 정보를 제공하기 위해 사용되며, 한 프로그램 내 어디에든 위치할 수
759 : gnustats 1220 있습니다. <a name="DOCF3" href="#FOOT3"><sup>3</sup></a>.
760 : gnustats 1203 </p>
761 :     <p>만약, 명령어가 한 줄에 입력되지 않고 다음행으로 계속 이어지면, R 은 자동적으로 아래와 같은 다른 기호로 프롬프트를 바꿔
762 :     명령문이 계속 이어지고 있음을 나타낼 것입니다.
763 :     </p>
764 :     <div class="example">
765 :     <pre class="example">+
766 :     </pre></div>
767 :    
768 :     <p>명령문이 문법적으로 완성될 때까지 명령문의 두 번째 줄과 ê·¸ 이후의 줄에서 이 프롬프트가 계속 나타나게 됩니다. 이러한
769 :     continuation (컨티뉴에이션) 프롬프트는 사용자에 의해서 변경될 수 있습니다. 이 문서에서는 컨티뉴에이션 프롬프트를 생략하고
770 :     단순히 인덴팅 (한 문자를 들여씀)을 사용하여 명령어가 계속 이어짐을 표현할 것입니다.
771 :     </p>
772 : gnustats 1220 <p>일반적으로 콘솔 내에서 입력할 수 있는 명령어 라인은 4095바이트로 제한 됩니다. <a name="DOCF4" href="#FOOT4"><sup>4</sup></a>
773 : gnustats 1203 </p>
774 :     <hr>
775 : gnustats 1251 <a name="g_t_00ec_009d_00b4_00ec-_0084_00ec_009d_0098-_00eb_00aa-_00eb-_00b9_00ec_0096_00b4_00eb_00a5_00bc-_00eb_00b6_0088_00eb_009f_00ac_00ec_0099_0080-_00ec_0088_0098_00ec-_0095_00ed_0095_0098_00ea_00b8_00b0"></a>
776 :     <a name="i_0027i-i-e_00aa-e-1i_0027eY_003d1_002f4-ePe_0021i-ii-ie_002c_00b0"></a>
777 :     <h3 class="section">1.9 이전의 명령어를 불러와 수정하기</h3>
778 : gnustats 1203
779 :     <p>다양한 버전의 UNIX와 윈도우즈에서 실행되는 R은 이전에 사용되었던 명령어들을 다시 불러오고 이를 재실행을 시킬 수 있는
780 :     매커니즘(mechanism)을 가지고 있습니다.이전에 실행되었던 명령문 히스토리 목록(<em>command history</em>)을
781 :     살펴보기 위해서 키보드의 위 또는 아래로 이동하는 화살표 키를 이용하시면 됩니다. 이렇게 해서 재실행하고 싶은 명령어를 찾고 나면, 이
782 :     명령어 내에서 좌 또는 우로 이동하는 화살표 키를 이용하여 커서를 변경하고자 하는 위치로 옮기고, <tt class="key">DEL</tt> 및 다른 키들을
783 : gnustats 1241 이용하여 해당 부분만 삭제하거나 수정하는 것 역시 가능합니다. 더 자세한 사항은 see <a href="#The-command_002dline-editor-_0028_00eb_00aa-_00eb-_00b9_00ec_0096_00b4_00eb_009d_00bc_00ec_009d_00b8-_00ed_008e_00b8_00ec_00a7_0091_00ea_00b8_00b0_0029">The command-line editor (명령어라인 편집기)</a> 을 살펴보시길 바랍니다.
784 : gnustats 1203 </p>
785 :     <p>UNIX 상에서는 이러한 명령문 히스토리를 불러오고 수정하는 기능을 사용자의 취향에 따라 매우 쉽게 조정
786 :     (customizable)가능합니다. 이러한 조정 방법은 <strong>readline</strong> 라이브러리 내 관련 매뉴얼 항목에서 찾으실 수
787 :     있습니다.
788 :     </p>
789 :     <p>또한, Emacs라는 텍스트 에디터는 R을 보다 파워풀하게 사용할 수 있도록 도와주는 <acronym>ESS</acronym>(<em>Emacs
790 : gnustats 1222 Speaks Statistics</em>)라는 보조시스템을 제공해줍니다. 이와 관련해서는 See <a href="R-FAQ.html#R-and-Emacs">R and Emacs</a> in <cite>The R statistical system FAQ</cite>을 참고하시길 바랍니다.
791 : gnustats 1203 </p>
792 :     <hr>
793 : gnustats 1251 <a name="g_t_00ed_008c_008c_00ec_009d_00bc_00ec_0097_0090-_00ec_009e_0091_00ec_0084_00b1_00eb_0090_009c-_00eb_00aa-_00eb-_00b9_00ec_0096_00b4_00eb_00a5_00bc-_00ec_008b_00a4_00ed_0096_0089_00ed_0095_0098_00ea_00b1_00b0_00eb_0082_0098-_00ec_00b6_009c_00eb-_00a5_00eb_00b0_00a9_00ed_0096_00a5_00ec_009d_0084-_00ed_008c_008c_00ec_009d_00bc_00eb_00a1_009c-_00eb_00b3_0080_00ea_00b2_00bd_00ed_0095_0098_00ea_00b8_00b0"></a>
794 :     <a name="ii1_002f4i-ii_002b_002de-e_00aa-e-1i_0027eY_003d1_002f4-i_0024_003fiie_002b_002d_00b0e-iPe-Y_003de_00b0_00a9iY_003di-ii1_002f4e_00a1-e3e21_002f2ie_002c_00b0"></a>
795 :     <h3 class="section">1.10 파일에 작성된 명령어를 실행하거나 출력방향을 파일로 변경하기</h3>
796 : gnustats 1203 <a name="index-i_002cePii1_002f4i-i-iY_003de-e_00aa-e-1-i_0024_003fi-e_00b0-i_002cePii1_002f4e_00a1-e2_00b0e31_002f4-i-iY_003die_002c_00b0"></a>
797 :    
798 :     <p>만약 <samp>work</samp>이라는 작업 디렉토리내에 (매우 방대한 양의) 명령문들이 <samp>commands.R</samp> 라는 이름으로
799 :     외부파일에 위치하고 있다면, 다음과 같은 명령문을 사용하여 R 세션 내 어느 때라도 이 명령문들을 실행할 수 있습니다.윈도우즈에서는
800 :     <strong>File</strong> 메뉴 항목에 위치한 <strong>Source</strong> 라는 기능도 동일한 작업을 수행합니다.
801 :     </p>
802 :     <div class="example">
803 :     <pre class="example">&gt; source(&quot;commands.R&quot;)
804 :     </pre></div>
805 :     <a name="index-source"></a>
806 :    
807 :     <p>다음의 <code>sink</code> 라는 함수를 사용하면 앞으로의 모든 결과물이 현재 사용중인 콘솔이 아니라 <samp>record.lis</samp>
808 :     라는 외부파일에 저장 됩니다.
809 :     </p>
810 :     <div class="example">
811 :     <pre class="example">&gt; sink(&quot;record.lis&quot;)
812 :     </pre></div>
813 :     <a name="index-sink"></a>
814 :    
815 :     <p>따라서, 이 함수가 사용된 이후로는 (명령문을 입력해도) 콘솔 상에 아무것도 출력되지 않게 됩니다.다음의 명령문을 입력하면,
816 :     </p>
817 :     <div class="example">
818 :     <pre class="example">&gt; sink()
819 :     </pre></div>
820 :    
821 :     <p>다시 결과값이 콘솔창에 나타나게 됩니다.
822 :     </p>
823 :     <hr>
824 : gnustats 1251 <a name="g_t_00ec_0098_0081_00ea_00b5_00ac_00ec-_0081-_00eb_008d_00b0_00ec_009d_00b4_00ed_0084_00b0-_00ec_0083_009d_00ec_0084_00b1-_00eb_00b0_008f-_00ea_00b0_009d_00ec_00b2_00b4_00ec_009d_0098-_00ec-_009c_00ea_00b1_00b0"></a>
825 :     <a name="ieu_0021i--e_00b0i_0027i_00b0-ii_002b_002d-e_00b0-e_00b0i2_0027i-i-e_002b_002d_00b0"></a>
826 :     <h3 class="section">1.11 영구적 데이터 생성 및 객체의 제거</h3>
827 : gnustats 1203
828 :     <p>R 을 사용해서 생성하고 다루게되는 모든 대상을 우리는 <em>objects</em>(객체)라고 정의 합니다. 변수
829 :     (variables), 숫자 배열 (arrays of numbers), 문자열 (character strings), 함수
830 :     (functions), 그리고 이러한 요소들이 바탕으로 한 좀 더 일반적인 구조물 등 모든 것들이 객체에 해당 합니다.
831 :     </p>
832 :     <p>그리고, 한 R 세션 내에서 사용 중인 객체들은 이름(name)을 갖게 됨으로써 생성되고 저장이 되어집니다 (이 과정에 대해서는
833 :     다음 섹션에서 더 자세히 설명할 것입니다).현재 R 세션내에서 사용 중인 모든 객체들의 목록을 확인하고자 한다면 아래의 명령어를
834 :     사용하면 됩니다.
835 :     </p>
836 :     <div class="example">
837 :     <pre class="example">&gt; objects()
838 :     </pre></div>
839 :    
840 : gnustats 1222 <p><code>ls()</code> 역시 현재 R 세션 내에 사용 중인 (대부분의) 객체의 이름을 보여줄 것입니다. 그리고, 이렇게 현재 사용중인
841 :     객체들이 저장되어 있는 공간을 <em>workspace</em>(워크스페이스 또는 작업공간)이라고 합니다.
842 : gnustats 1203 <a name="index-Workspace"></a>
843 :     </p>
844 :     <p>이 작업 공간에서 객체를 삭제하기 위해서는 아래와 같이 <code>rm</code> 을 사용합니다:
845 :     </p>
846 :     <div class="example">
847 :     <pre class="example">&gt; rm(x, y, z, ink, junk, temp, foo, bar)
848 :     </pre></div>
849 :     <a name="index-rm"></a>
850 :     <a name="index-Removing-objects"></a>
851 :    
852 :     <p>하나의 R 세션 내에서 생성된 모든 객체들은 다음 세션에서 다시 사용하기 위해 파일 형태로 영구 저장하는 것이 가능합니다.각
853 :     R세션을 종료할 때는, 현재 세션에서 사용중인 모든 객체들을 저장할 수 있는 기회가 주어집니다. 만약, 당신이 객체들을 저장하고
854 : gnustats 1220 싶다고 선택하면, 객체들은 <samp>.RData</samp>이라는 파일형식으로 워킹 디렉토리에 저장됩니다. <a name="DOCF5" href="#FOOT5"><sup>5</sup></a>동시에 같은 디렉토리에
855 : gnustats 1203 이 세션에서 사용되었던 모든 명령어들 역시 <samp>.Rhistory</samp>이라는 파일에 함께 저장되게 됩니다.
856 :     </p>
857 :     <p>추후에 R이 같은 디렉토리에서 실행될 경우, 이 저장된 파일로부터 저장된 작업 공간이 다시 열리며 이전 세션에서 사용했던 객체들과
858 :     명령어들이 다시 사용 가능하게 됩니다.
859 :     </p>
860 :     <p>R을 이용하여 여러 개의 분석을 진행한다면, 각각의 분석 별로 다른 작업 공간을 생성하실 것을 권장합니다.ê·¸ 이유는 <code>x</code>
861 :     와 <code>y</code> 같은 매우 일반적인 이름으로 객체를 생성하게 되는 경우가 매우 흔하기 때문입니다.만약 분석을 한 번만 한다면 큰
862 :     문제가 없겠지만, 여러 개의 분석이 같은 작업 공간에서 이루어진다면 비슷한 이름을 가진 각각의 객체들이 각각의 분석에서 어떤 식으로
863 :     사용되고 있는지 알아차리기가 쉽지 않을 것이기 때문입니다.
864 :     </p>
865 :     <hr>
866 :     <a name="Simple-manipulations-numbers-and-vectors"></a>
867 : gnustats 1235 <a name="i_00abii-e2_00a1i_00b0i-ei-e_002c_00b0i_0027-i_00a1_00b0ie2"></a>
868 :     <h2 class="chapter">2 숫자와 벡터에 대한 기초 조작법</h2>
869 : gnustats 1203 <a name="index-Vectors"></a>
870 :    
871 :    
872 :     <hr>
873 : gnustats 1251 <a name="g_t_00eb_00b2_00a1_00ed_0084_00b0_00ec_0099_0080-_00ed_0095-_00eb_008b_00b9"></a>
874 :     <a name="e2_00a1i_00b0i-i-e1"></a>
875 :     <h3 class="section">2.1 벡터와 할당</h3>
876 : gnustats 1203
877 :     <p>R은 <em>data structures</em>(데이터 구조)라는 것을 기반으로 작동합니다. 가장 단순한 데이터의 구조는 임의의
878 :     숫자들의 정렬인 숫자형 (numeric) <em>vector</em>(벡터)입니다.예를들어, 10.4, 5.6, 3.1, 6.4, 그리고
879 :     21.7 라는 일련의 숫자로 <code>x</code>라는 이름을 가진 벡터를 생성하기 위해서는 다음과 같은 R 명령어를 입력합니다
880 :     </p>
881 :     <div class="example">
882 :     <pre class="example">&gt; x &lt;- c(10.4, 5.6, 3.1, 6.4, 21.7)
883 :     </pre></div>
884 :     <a name="index-c"></a>
885 :     <a name="index-vector"></a>
886 :    
887 :     <p>위에서 사용된 표현식을 <em>assignment statement</em>(할당문) 이라고 하며, 여기서 사용된 <code>c()</code>라는
888 :     <em>function</em>(함수)는 함수 안에 입력된 여러 개의 임의의 숫자들을 하나로 연결하여 하나의 벡터를 생성합니다. 여기서 쉽표
889 : gnustats 1222 <code>,</code> 에 의해 구분된 하나 하나의 숫자는 그 자체로 길이가 1인 벡터로 볼 수도
890 :     있습니다.<a name="DOCF6" href="#FOOT6"><sup>6</sup></a>
891 : gnustats 1203 </p>
892 :     <p>A number occurring by itself in an expression is taken as a vector of length
893 :     one.
894 :     </p>
895 :     <p>또한, 띄어쓰기 없이 &lsquo;<samp><code>&lt;</code></samp>&rsquo;(부등호, 좌측이 우측보다 작음을 표시하는 수학적 기호) 와
896 :     &lsquo;<samp><code>-</code></samp>&rsquo;(음수를 나타내는 기호)를 붙여 써서 만든 &lsquo;<samp><code>&lt;-</code></samp>&rsquo; 라는 기호는 할당
897 :     연산자(assignment operator)라고 하며, 이 기호의 오른쪽의 표현식에 의해 생성된 값을 갖는 객체를 왼쪽의 이름을 갖도록
898 :     지정합니다. 대부분의 경우 &lsquo;<samp><code>=</code></samp>&rsquo; 연산자를 같은 작업을 이용하여 할 수 있습니다.
899 :     <a name="index-Assignment"></a>
900 :     </p>
901 :     <p>할당(Assignment) 작업은 <code>assign()</code> 함수를 통해서도 이루어질 수 있습니다. 위에서 수행한 것과 동일한 연산을
902 :     아래와 같은 방법으로도 할 수 있습니다.
903 :     </p>
904 :     <div class="example">
905 :     <pre class="example">&gt; assign(&quot;x&quot;, c(10.4, 5.6, 3.1, 6.4, 21.7))
906 :     </pre></div>
907 :    
908 :     <p>여러분은 할당 연산자 <code>&lt;-</code>를 단순히 <code>assign()</code> 함수와 같은 작업을 하는, 문법적으로는 더 쉬운
909 :     방법(short-cut)이라고 생각하셔도 됩니다.
910 :     </p>
911 :     <p>또, 이 할당 연산자의 방향을 바꾸어 아래와 같은 방법으로 사용할 수도 있습니다.
912 :     </p>
913 :     <div class="example">
914 :     <pre class="example">&gt; c(10.4, 5.6, 3.1, 6.4, 21.7) -&gt; x
915 :     </pre></div>
916 :    
917 :     <p>만약 아래와 같이 할당 연산자를 사용하지 않고 표현식만으로 명령문을 작성하면, 결과물은 출력 되지만, 이 값이 저장되지 않아
918 : gnustats 1220 <em>다시 불러 낼 수 없습니다</em>. <a name="DOCF7" href="#FOOT7"><sup>7</sup></a>.
919 : gnustats 1203 </p>
920 :     <div class="example">
921 :     <pre class="example">&gt; 1/x
922 :     </pre></div>
923 :    
924 :     <p>이제 위의 명령문을 실행하여 (위에서 할당한) <code>x</code>의 다섯 개 숫자의 역수 다섯 개를 출력 해 봅시다.
925 :     </p>
926 :     <p>다음은 여기에 할당 연산자를 적용해보도록 합니다.
927 :     </p>
928 :     <div class="example">
929 :     <pre class="example">&gt; y &lt;- c(x, 0, x)
930 :     </pre></div>
931 :    
932 :     <p>다음의 할당문은 2개의 <code>x</code> 벡터 사이에 0 을 입력한, 총 11개의 숫자로 구성된 <code>y</code> 라는 새로운 벡터를 생성
933 :     합니다.
934 :     </p>
935 :     <hr>
936 : gnustats 1251 <a name="g_t_00eb_00b2_00a1_00ed_0084_00b0-_00ec_0097_00b0_00ec_0082_00b0"></a>
937 :     <a name="e2_00a1i_00b0-i_00b0i_00b0"></a>
938 :     <h3 class="section">2.2 벡터 연산</h3>
939 : gnustats 1203
940 :     <p>벡터(vector)는 요소 단위의 (element by element) 산술연산 표현식(arithmetic expression)에 사용
941 :     가능 합니다. 이 때, 같은 (산술) 표현식 내의 벡터들이 모두 같은 길이를 가질 필요는 없습니다.만약, 벡터들의 길이가 다르면 가장 긴
942 :     길이의 벡터를 기준으로, 상대적으로 짧은 길이를 갖는 벡터는 긴 벡터의 길이에 맞추기 위해 ê·¸ 구성 요소를
943 :     재활용(<em>recycled</em>)하여 연산을 수행 합니다. 즉, 더 짧은 길이의 벡터는 가장 긴 벡터와 같은 길이를 같도록 구성
944 :     요소를 필요한 만큼 (경우에 따라서는 일부만) 반복 사용 합니다. 특히, 벡터의 길이가 1인 상수(constant)를 벡터와의 연산에
945 :     사용할 경우, 이 상수가 벡터의 길이만큼 반복되서 사용 됩니다.
946 :     <a name="index-Recycling-rule"></a>
947 :     </p>
948 :     <div class="example">
949 :     <pre class="example">&gt; v &lt;- 2*x + y + 1
950 :     </pre></div>
951 :    
952 :     <p>위의 예제를 이용해서 설명하면, 다음 명령문을 실행하면 R은 연산을 하기 전 <code>x</code>의 길이를 <code>y</code>에 맞추기
953 :     위해서 ê·¸ 구성 요소를 대략 2.2 번 반복하여 길이 11의 벡터를 만듭니다. 그리고, 2를 <code>x</code> 의 각 요소에 곱한 뒤
954 :     (11번의 곱하기 연산이 필요합니다), <code>y</code>의 각 요소와 더하기 연산을 수행합니다. 마지막으로 상수 <code>1</code>과의 더하기
955 :     연산 역시 11 번에 걸쳐 수행하며, 이렇게 벡터의 각 요소별로 수행된 연산의 결과는 길이 11의 벡터인 <code>v</code>에 할당
956 :     됩니다.
957 :     </p>
958 :     <a name="index-Arithmetic-functions-and-operators"></a>
959 : gnustats 1222 <p>요소 단위 기본 연산자는 <code>+</code>(더하기), <code>-</code>(빼기), <code>*</code>(곱하기), <code>/</code>(나누기), 그리고
960 :     <code>^</code>(자승) 입니다.
961 : gnustats 1203 <a name="index-_002b"></a>
962 :     <a name="index-_002d"></a>
963 :     <a name="index-_002a"></a>
964 :     <a name="index-_002f"></a>
965 :     <a name="index-_005e"></a>
966 : gnustats 1222 일반적인 수학 연산에 자주 사용되는 <code>log</code>, <code>exp</code>, <code>sin</code>, <code>cos</code>,
967 : gnustats 1203 <code>tan</code>, <code>sqrt</code>와 같은 함수가 모두 제공되며, 수학에서 사용하는 것과 동일한 방법으로 사용 됩니다.
968 :     <a name="index-log"></a>
969 :     <a name="index-exp"></a>
970 :     <a name="index-sin"></a>
971 :     <a name="index-cos"></a>
972 :     <a name="index-tan"></a>
973 :     <a name="index-sqrt"></a>
974 :     <code>max</code>와 <code>min</code>는 벡터의 구성요소들 중에서 가장 큰 값과 작은 값을 보여주는 함수입니다.
975 :     <a name="index-max"></a>
976 :     <a name="index-min"></a>
977 :     <code>range</code> is a function whose value is a vector of length two, namely
978 :     <code>c(min(x), max(x))</code>.
979 :     <a name="index-rangee-i_00a31_002f4i_0027iSS-e2_00a1i_00b0-xi-e_00aa_0022e-eu_0021i_002b_002dii-i_0024_003f-iuie_00b0e31_002f4-iuee_00b0i-c_0028min_0028x_0029_002c-max_0028x_0029_0029i-iie_00a1-iPe-Y_003die_00a9_00b0_002c-i_0027e_007c-e_002a_002cee_00a1-e2_00a1i_00b0-e3ii-e2ieY_003d1_002f4-eu_0021i-e-i_0021i_00a9-i_00a9ee_0024_003f_002e"></a>
980 :     <code>length(x)</code>는 벡터 <code>x</code> 의 구성요소가 몇 개인가를 알려주며, 이를 보통 <code>x</code>의 길이라고 합니다.
981 :     <a name="index-length"></a>
982 :     <code>sum(x)</code>는 <code>x</code>의 모든 구성요소들의 합을 구하고자 할 때 사용하고,
983 :     <a name="index-sum"></a>
984 :     <code>prod(x)</code>는 모든 구성요소들의 곱을 구할 때 이용됩니다.
985 :     <a name="index-prod"></a>
986 :     </p>
987 :     <p>R에서는 통계학에서 자주 이용되는 평균과 분산을 계산하는 함수들도 제공됩니다.샘플 평균(sample mean)은
988 :     <code>sum(x)/length(x)</code>으로 계산 되는데, <code>mean(x)</code>를 사용해서도 같은 결과를 얻을 수 있습니다.
989 :     <a name="index-mean"></a>
990 :     그리고, 샘플 분산(sample variance)은 아래와 같은 공식을 통해 계산하는데, 이 역시 <code>var(x)</code>를 사용하면
991 :     아주 간단하게 계산할 수 있습니다.
992 :     </p>
993 :     <div class="example">
994 :     <pre class="example">sum((x-mean(x))^2)/(length(x)-1)
995 :     </pre></div>
996 :     <a name="index-var"></a>
997 :    
998 :     <p>만약, <code>var()</code> 에 사용되는 입력인자(argument)가 <em>n</em>-by-<em>p</em> 크기의 행렬이라면,
999 :     입력인자가<em>p</em>개의 변수들에 대한 <em>n</em> 개의 관측치를 갖는 데이터로 인식되어 <em>p</em>-by-<em>p</em>
1000 :     크기의 샘플 공분산 행렬(sample covariance matrix)을 계산 합니다.
1001 :     </p>
1002 :     <p><code>sort(x)</code>는 벡터 <code>x</code>를 인자로 받아 <code>x</code>의 모든 구성요소들을 오름차순(increasing
1003 :     order, 즉, 작은 값에서 큰 값의 순서로)으로 재배열하여 <code>x</code>와 같은 길이의 벡터를 출력하는 함수 입니다. 이와 비슷한
1004 :     다른 정렬 함수들 역시 매우 유용하며, 가장 빈번하게 사용되는 예로는 인자로 사용된 <code>x</code> 벡터의 정렬 순서를 확인하기 위해
1005 :     <code>order()</code> 또는 <code>sort.list()</code>를 사용하는 것을 들 수 있습니다.
1006 :     <a name="index-sort"></a>
1007 :     <a name="index-order"></a>
1008 :     </p>
1009 :     <p><code>max</code>와 <code>min</code>에 여러 개의 벡터가 동시에 입력인수로 사용되었을지라도, 입력된 모든 구성요소들 중에서 최대값과
1010 :     최소값 하나씩 만을 출력합니다.만약, 여러 개의 벡터 입력인자들을 동시에 입력해서 최대값과 최소값의 병렬(<em>parallel</em>
1011 :     원한다면, 즉 입력된 여러 개 벡터 인자들을 입력순서 별 최대값 혹은 최소값을 찾는 과정) 원한다면, <code>pmax</code>와
1012 :     <code>pmin</code> 함수를 각각 이용할 수 있습니다. 이 때 반환되는 벡터의 길이는 입력 인자들 중에서 가장 길이가 긴 벡터와
1013 :     동일합니다. (즉, 길이가 다른 벡터들의 입력시, 길이가 짧은 벡터와 긴 벡터의 비교가 불가능한 구간에서는 오직 비교 가능한 벡터들끼리만
1014 :     비교해서, 혹은 가장 길기가 긴 벡터의 구성요소를 그대로 출력하게 됩니다).
1015 :     <a name="index-pmax"></a>
1016 :     <a name="index-pmin"></a>
1017 :     </p>
1018 :     <p>대부분의 연산에서, 숫자형 벡터(numeric vector)의 구성요소인 &ldquo;numbers&rdquo;(숫자)의 종류가 정수(integer)인지,
1019 :     실수(real)인지, 또는 허수(complex)인지는 중요하지 않습니다. R은 자체적으로 입력된 벡터가 실수인 경우 double
1020 :     precision을 갖는 실수로, 복소수(허수)이면 double precision을 갖는 복소수로 연산을 수행할 수 있습니다.
1021 :     </p>
1022 :     <p>단, 복소수 연산의 경우, 어느 부분이 허수 부분(copmlex part)인지는 정확히 명시해주어야 합니다.
1023 :     </p>
1024 :     <div class="example">
1025 :     <pre class="example">sqrt(-17)
1026 :     </pre></div>
1027 :    
1028 :     <p>아래 예시와 같이 허수 부분이 지정하지 않고 명령문을 사용하면, <code>NaN</code> 값과 경고(warning) 메시지가 출력 될
1029 :     것입니다.
1030 :     </p>
1031 :     <div class="example">
1032 :     <pre class="example">sqrt(-17+0i)
1033 :     </pre></div>
1034 :    
1035 :     <p>따라서, 다음과 같이 명령문을 입력해야 복소수 연산이 올바르게 수행 됩니다.
1036 :     </p>
1037 :    
1038 :     <hr>
1039 : gnustats 1245 <a name="Generating-regular-sequences-_0028_00ea_00b7_009c_00ec_00b9_0099_00ec_0084_00b1_00ec_009d_0084-_00ec_00a7_0080_00eb_008b_008c-_00ec_009d_00bc_00eb-_00a8_00ec_009d_0098-_00ec_0088_00ab_00ec_009e_0090_00eb_0093_00a4_00ec_009d_0084-_00ec_0083_009d_00ec_0084_00b1_00ed_0095_0098_00ea_00b8_00b0_0029"></a>
1040 :     <a name="Generating-regular-sequences-_0028e_002ai1i_002b_002di-iSSe-i1_002f4e-_0022i-i_00abie_0024_003fi-ii_002b_002die_002c_00b0_0029"></a>
1041 :     <h3 class="section">2.3 Generating regular sequences (규칙성을 지닌 일련의 숫자들을 생성하기)</h3>
1042 : gnustats 1203 <a name="index-Regular-sequences"></a>
1043 :    
1044 :     <p>R은 수열 (sequence)을 생성하는 다양한 방법을 제공합니다.예를 들면, <code>1:30</code>이라는 명령어는
1045 :     <code>c(1, 2, &hellip;, 29, 30)</code>ê³¼ 같은 벡터를 생성합니다.
1046 :     <a name="index-_003a"></a>
1047 :     또 R의 표현식에서는 콜론(colon) 연산자가 다른 어떤 연산 보다 최우선으로 처리됩니다. 예를 들면, <code>2*1:15</code>은
1048 :     <code>c(2, 4, &hellip;, 28, 30)</code>ê³¼ 같은 벡터를 생성합니다. 좀 더 정확한 이해를 위해, <code>n &lt;-
1049 :     10</code>을 입력한 뒤, <code>1:n-1</code>ê³¼ <code>1:(n-1)</code>로부터 생성되는 두개의 벡터를 비교해보시길 바랍니다.
1050 :     </p>
1051 :     <p>또 <code>30:1</code>이라는 명령문은 역순으로 (큰 수부터 작은 수로) 나열된 수열을 생성합니다.
1052 :     </p>
1053 :     <a name="index-seq"></a>
1054 :     <p><code>seq()</code> 함수는 수열을 생성하는 좀 더 일반적인 방법 입니다. <code>seq()</code>는 5개의 파라미터를 가질 수 있는데,
1055 :     이중의 일부만 사용해도 다양한 수열의 생성이 가능합니다.먼저, 처음 두개의 파라미터는 수열의 처음과 마지막 값을 지정합니다.이 두 개의
1056 :     인자만 지정하면, 콜론 연산자를 사용한 것과 동일한 결과를 얻게 됩니다. 즉, <code>seq(2,10)</code>에 의하여 생성된 수열은
1057 :     <code>2:10</code>으로부터 생성된 수열과 동일합니다.
1058 :     </p>
1059 :     <p>R의 다른 많은 함수들처럼 함수 <code>seq()</code>가 사용하는 파라미터들은 반드시 함수에 지정된 순서로 입력되야 하며, 이
1060 :     지정된 순서를 따를 경우 파라미터의 입력이 언뜻 이상하게 보일 수도 있습니다. 위에서 사용한 예제 <code>seq(1,30)</code>를 통해
1061 :     설명하면, <code>seq()</code>의 처음 두 파라미터들은 처음 시작값 <code>from=<var>value</var></code>ê³¼ 마지막 값
1062 :     <code>to=<var>value</var></code>을 각각 의미하기 때문에, <code>seq(1,30)</code>, <code>seq(from=1,
1063 :     to=30)</code>, <code>seq(to=30, from=1)</code> 모두 <code>1:30</code>으로부터 생성된 수열과 동일한 수열을
1064 :     생성합니다.<code>seq()</code>의 다음 두개(세번째와 네번째)의 파라미터들은 <code>by=<var>value</var></code>와
1065 :     <code>length=<var>value</var></code> 입니다. <code>by=<var>value</var></code>는 나열하게 될 숫자들 간의 차이 (step
1066 :     size)를 지정하며, <code>length=<var>value</var></code>는 나열하게 될 숫자의 길이(length)를 지정합니다. 만약, 이
1067 :     두가지 모두 지정되지 않는다면, 기본적으로 <code>by=1</code>를 가정한 상태에서 수열을 생성하게 됩니다.
1068 :     </p>
1069 :     <p>다음의 예시를 살펴봅니다.
1070 :     </p>
1071 :     <div class="example">
1072 :     <pre class="example">&gt; seq(-5, 5, by=.2) -&gt; s3
1073 :     </pre></div>
1074 :    
1075 :     <p>위 명령어를 실행하면 <code>c(-5.0, -4.8, -4.6, &hellip;, 4.6, 4.8, 5.0)</code>라는 수열을 생성하여,
1076 :     이를 <code>s3</code>라는 이름의 벡터형 객체로 저장하게 됩니다.
1077 :     </p>
1078 :     <div class="example">
1079 :     <pre class="example">&gt; s4 &lt;- seq(length=51, from=-5, by=.2)
1080 :     </pre></div>
1081 :    
1082 :     <p>아래와 같은 방법으로도 <code>s3</code>와 같은 벡터 <code>s4</code>를 생성할 수 있습니다.
1083 :     </p>
1084 :     <p>마지막으로 <code>seq()</code> 함수의 다섯번 째 파라미터는 <code>along=<var>vector</var></code>이며, 다른 파라이터의 입력
1085 :     없이 이 파라미터만 사용할 경우, <code>1, 2, &hellip;, length(<var>vector</var>)</code>인 수열을 생성 합니다.
1086 :     </p>
1087 :     <p>A related function is <code>rep()</code>
1088 :     <a name="index-rep"></a>
1089 :     <code>seq()</code>와 비슷한 수열 생성 함수 중, 객체를 반복하는데 사용할 수 있는 <code>rep()</code>라는 함수가 있습니다. 이
1090 :     함수의 사용법은 아래와 같습니다.
1091 :     </p>
1092 :     <div class="example">
1093 :     <pre class="example">&gt; s5 &lt;- rep(x, times=5)
1094 :     </pre></div>
1095 :    
1096 :     <p>위 명령어는 <code>x</code>라는 벡터를 처음부터 끝까지 5번 반복해서 나열한 객체를 <code>s5</code>로 지정 합니다.위 함수와 같은
1097 :     결과를 얻기 위해 아래와 같은 명령문을 사용할 수도 있습니다.
1098 :     </p>
1099 :     <div class="example">
1100 :     <pre class="example">&gt; s6 &lt;- rep(x, each=5)
1101 :     </pre></div>
1102 :    
1103 :     <p>둘 다 <code>x</code>란 벡터가 가지고 있는 각각의 요소들을 5번씩 반복 나열하여 수열을 생성 합니다.
1104 :     </p>
1105 :     <hr>
1106 : gnustats 1251 <a name="g_t_00eb-_00bc_00eb_00a6_00ac_00ed_0098_0095-_00eb_00b2_00a1_00ed_0084_00b0"></a>
1107 :     <a name="e-1_002f4e_007c_0021i-e2_00a1i_00b0"></a>
1108 :     <h3 class="section">2.4 논리형 벡터</h3>
1109 : gnustats 1203
1110 :     <p>R은 수치형 벡터 뿐만 아니라 논리값에 대한 연산도 가능합니다.논리형 벡터는 <code>TRUE</code>, <code>FALSE</code>, 그리고
1111 :     <code>NA</code> (즉 &ldquo;not available&rdquo; - 해당 값이 이용가능하지 않아 사용에는 많은 제약이 따름)와 같은 요소로 구성
1112 :     됩니다.처음 두 개의 요소인 <code>TRUE</code>와 <code>FALSE</code>가 각각 <code>T</code>와 <code>F</code>라는 약어로 표기하기도
1113 :     하며, 이러한 약어 사용은 R에서 초기값으로 지정된 것입니다. 하지만, 사용자가 이 두 문자를 다른 변수나 함수 이름으로 사용할 경우,
1114 :     더 이상 이러한 초기 약어 지정은 성립하지 않습니다. 따라서, 논리값을 표현할 때에는 <code>TRUE</code>와 <code>FALSE</code>와
1115 :     같이 정확하게 표기할 것을 권장 합니다.
1116 :     <a name="index-FALSE"></a>
1117 :     <a name="index-TRUE"></a>
1118 :     <a name="index-F"></a>
1119 :     <a name="index-T"></a>
1120 :     </p>
1121 :     <p>논리형 벡터는 조건문 (<em>conditions</em>)에 의해서 생성됩니다.
1122 :     </p>
1123 :     <div class="example">
1124 :     <pre class="example">&gt; temp &lt;- x &gt; 13
1125 :     </pre></div>
1126 :    
1127 :     <p>예를 들어 아래의 명령문을 입력하면, <code>x</code> 벡터의 각 구성요소에 대해 13 보다 크다는 조건문이 참인지 거짓인지를 판단하여,
1128 :     해당 구성 요소가 13 보다 큰 위치에는 <code>TRUE</code>, 그렇지 않은 경우에는 <code>FALSE</code>를 출력하여 원래의
1129 :     <code>x</code>와 같은 길이를 갖는 새 벡터<code>temp</code>를 생성 합니다.
1130 :     </p>
1131 :     <p>논리 연산자에는 <code>&lt;</code> (작음), <code>&lt;=</code> (작거나 같음), <code>&gt;</code> (큼), <code>&gt;=</code> (크거나
1132 :     같음), <code>==</code> (같음), 그리고 <code>!=</code> (다름) 등이 있습니다.
1133 :     <a name="index-_003c"></a>
1134 :     <a name="index-_003c_003d"></a>
1135 :     <a name="index-_003e"></a>
1136 :     <a name="index-_003e_003d"></a>
1137 :     <a name="index-_003d_003d"></a>
1138 :     <a name="index-_0021_003d"></a>
1139 :     또한, <code>c1</code>ê³¼ <code>c2</code>와 같이 두 개의 논리 표현식이 있는 경우, <code>c1&nbsp;&amp;&nbsp;c2</code><!-- /@w -->는
1140 :     (<em>&ldquo;and&rdquo;</em>)를 나타내는 교집합을 <code>c1&nbsp;|&nbsp;c2</code><!-- /@w -->는 (<em>&ldquo;or&rdquo;</em>)를 나타내는 합집합을
1141 :     의미하며, <code>!c1</code>는 <code>c1</code>를 만족하지 않는 차집합을 의미 합니다.
1142 :     <a name="index-_0021"></a>
1143 :     <a name="index-_007c"></a>
1144 :     <a name="index-_0026"></a>
1145 :     </p>
1146 :     <p>논리형 벡터들은 일반적인 산술연산에 사용할 수도 있으며, 이 경우 논리값인 <code>FALSE</code>는 숫자 <code>0</code>으로
1147 :     <code>TRUE</code>는 숫자 <code>1</code>로 변환 되어야 합니다. 이러한 변환을 <em>coerced</em>(강제형변환)이라고
1148 :     합니다. 그러나 논리형 벡터들이 수치형 벡터로의 강제형변환이 항상 위와 같은 방식으로만 이루어지는 것은 아니며, 여기에 대해서는 다음
1149 :     섹션에서 살펴보도록 하겠습니다.
1150 :     </p>
1151 :     <hr>
1152 : gnustats 1251 <a name="g_t_00ea_00b2_00b0_00ec_00b8_00a1_00ea_00b0_0092"></a>
1153 :     <a name="e2_00b0i_002c_00a1e_00b0"></a>
1154 :     <h3 class="section">2.5 결측값</h3>
1155 :     <a name="index-e2_00b0i_002c_00a1e_00b0"></a>
1156 : gnustats 1203
1157 :     <p>가끔 벡터의 구성요소들 중 일부가 완전하지 않은 경우가 있습니다.통계적 의미에서 이러한 구성요소 또는 값들은 &ldquo;not
1158 :     available&rdquo; (사용이 가능하지 않음) 또는 &ldquo;missing value&rdquo;(결측치 혹은 누락된 값)을 의미하며, 이러한 값들은
1159 :     벡터 내에서 <code>NA</code>라는 특수 문자로 표기 됩니다.
1160 :     <a name="index-NA"></a>
1161 :     일반적으로 어떤 연산이든 <code>NA</code>에 대한 연산의 결과는 <code>NA</code>가 됩니다.이러한 규칙을 만들게 된 동기는
1162 :     단순합니다. 이러한 결측치의 연산법을 따로 지정하지 않으면, 결측치의 포함으로 인해 해당 연산이 정의되지 않거나 결과가 출력되지 않기
1163 :     때문입니다.
1164 :     </p>
1165 :     <a name="index-is_002ena"></a>
1166 :     <p>함수 <code>is.na(x)</code>는 <code>x</code>의 각 구성요소 중 <code>NA</code>가 포함되었는지를 확인하여, 논리값인
1167 :     <code>TRUE</code>또는 <code>FALSE</code>를 갖는 새로운 벡터를 생성 합니다. 따라서, 생성된 벡터의 길이는 원래 벡터인
1168 :     <code>x</code>와 같아야 하며, 이는 아래의 명령문을 통해 확인해 ë³¼ 수 있습니다.
1169 :     </p>
1170 :     <div class="example">
1171 :     <pre class="example">&gt; z &lt;- c(1:3,NA); ind &lt;- is.na(z)
1172 :     </pre></div>
1173 :    
1174 :     <p>그러나, <code>NA</code>라는 것은 실제로 단순히 벡터를 구성하는 요소의 값이 사용가능한지에 대한 마커일 뿐 해당 요소에 대한 값이
1175 :     아니기 때문에 <code>x == NA</code>이라는 논리적 표현식과 <code>is.na(x)</code>는 서로 다른 것을 의미한다는 점을 이해하셔야
1176 :     합니다. 즉 <code>x == NA</code>는 벡터 <code>x</code>와 길이는 같지만 ê·¸ 구성요소 <em>모두</em>가 <code>NA</code>값을
1177 :     가지므로, 이 식 자체가 논리형 표현식이라 어떤 연산을 수행하기에는 불완전하고 불충분하기 때문입니다.
1178 :     </p>
1179 :     <p>또한 수치연산의 결과로서 발생하는 또 다른 종류의 결측치(&ldquo;missing&rdquo;)인 <code>NaN</code>은 <em>Not a
1180 :     Number</em>(숫자가 아님)을 의미 합니다. 다음의 두 예제를 통해서 좀 더 자세히 알아 봅시다.
1181 :     <a name="index-NaN"></a>
1182 :     values. Examples are
1183 :     </p>
1184 :     <div class="example">
1185 :     <pre class="example">&gt; 0/0
1186 :     </pre></div>
1187 :    
1188 :     <p>or
1189 :     </p>
1190 :     <div class="example">
1191 :     <pre class="example">&gt; Inf - Inf
1192 :     </pre></div>
1193 :    
1194 :     <p>위의 두가지 경우 모두 수학적 정의에 따른 계산을 수행할 수 없기 때문에 <code>NaN</code>이라는 결과를 출력하게 됩니다.
1195 :     </p>
1196 :     <p>요약해보면, <code>is.na(xx)</code>는 구성요소 중 하나 이상이 <code>NA</code>이거나 <code>NaN</code>인 두가지 경우 모두
1197 :     <code>TRUE</code> 값을 돌려줍니다. 그러나, <code>is.nan(xx)</code>은 오직 구성 요소에 <code>NaN</code>이 포함될 때만
1198 :     <code>TRUE</code>가 됩니다.
1199 :     <a name="index-is_002enan"></a>
1200 :     </p>
1201 :     <p>때때로 이렇게 <code>&lt;NA&gt;</code>로 표시된 값들 중, 실제 결측치가 아니라 단지 문자형 벡터가 인용 부호 (&quot;quotes&quot;) 없이
1202 :     사용되었기 때문인 경우도 있으므로 주의하시기 바랍니다.
1203 :     </p>
1204 :     <hr>
1205 : gnustats 1251 <a name="g_t_00eb_00ac_00b8_00ec_009e_0090_00ed_0098_0095-_00eb_00b2_00a1_00ed_0084_00b0"></a>
1206 :     <a name="e_0021_002cii-e2_00a1i_00b0"></a>
1207 :     <h3 class="section">2.6 문자형 벡터</h3>
1208 :     <a name="index-e_0021_002cii-e2_00a1i_00b0"></a>
1209 : gnustats 1203
1210 :     <p>문자값 또는 문자형 벡터는 종종 R에서 플롯의 라벨 등으로 사용 됩니다. 이러한 문자열은 <code>&quot;x-values&quot;</code> 또는
1211 :     <code>&quot;New iteration results&quot;</code>ê³¼ 같이 <code>&quot;&quot;</code> (큰 따옴표)에 의해 구분 됩니다.
1212 :     </p>
1213 :     <p>문자열의 입력은 큰 따옴표 (<code>&quot;</code>)와 작은 따옴표 (<code>'</code>)를 모두 사용할 수 있지만, 입력된 문자열을 출력할 때는
1214 :     큰 따옴표에 의해 각 구성요소가 구분 됩니다. (경우에 따라 큰 따옴표 없이 출력되는 것도 가능 합니다).R에서는 C 언어처럼
1215 :     <code>\</code>를 확장 문자(escape sequence)로 사용하여 문자열을 처리하는 것이 가능합니다. 따라서, <code>\\</code>를
1216 :     출력하기 위해서는 (<code>&quot;</code>로 구분된) 문자열 내에 <code>\\</code>을 사용하고, 큰 따옴표 <code>&quot;</code>를 출력하기 위해서는
1217 :     <code>&quot;</code>를 사용하도록 합니다. ê·¸ 밖의 유용한 이스케이프 시퀀스들로는 <code>\n</code>이 있는데 이는 새로운 행(즉, 개행)을,
1218 :     <code>\t</code>는 탭(tab)을, <code>\b</code>는 백스페이스를 나타냅니다. 사용 가능한 확장 문자 대한 전체 목록을 확인하고
1219 :     싶으시면 <code>?Quotes</code>을 입력하시길 바랍니다.
1220 :     </p>
1221 :     <p><code>c()</code>라는 함수를 이용하면 문자열을 연결하여 새로운 문자열 벡터를 생성할 수 있습니다. 이러한 문자 벡터의 생성은 앞으로
1222 :     자주 등장하게 될 것입니다.
1223 :     <a name="index-c-1"></a>
1224 :     </p>
1225 :     <a name="index-paste"></a>
1226 :     <p><code>paste()</code> 함수는 임의의 개수의 인자들을 입력받아, 이들을 한데 묶어 하나의 문자열로 생성 합니다.이 때, 주어진 인자들
1227 :     중 일부가 숫자라도, 이들 역시 문자형으로 강제형변환이 이루어짐을 아셔야 합니다. 이러한 형변환 결과는 출력을 통해 확일할 수 있는데,
1228 :     합쳐진 각각의 문자형 인자들 사이는 하나에는 공백문자(white space 또는 blank character)가 포함되어 두 요소가
1229 :     합쳐졌다는 것을 알 수 있습니다. 이러한 공백문자를 포함한 새로운 문자형 인자의 생성은 <code>sep=<var>string</var></code> 옵션을
1230 :     사용하여 다른 문자에 의해 구분되도록 지정하는 것이 가능하며, 아래의 예제처럼 입력시 <code><var>string</var></code>은 공백 없이 두
1231 :     요소를 하나로 합치는 것도 가능합니다.
1232 :     </p>
1233 :     <p>다음의 예시를 살펴봅니다.
1234 :     </p>
1235 :     <div class="example">
1236 :     <pre class="example">&gt; labs &lt;- paste(c(&quot;X&quot;,&quot;Y&quot;), 1:10, sep=&quot;&quot;)
1237 :     </pre></div>
1238 :    
1239 :     <p>makes <code>labs</code> into the character vector
1240 :     </p>
1241 :     <div class="example">
1242 :     <pre class="example">c(&quot;X1&quot;, &quot;Y2&quot;, &quot;X3&quot;, &quot;Y4&quot;, &quot;X5&quot;, &quot;Y6&quot;, &quot;X7&quot;, &quot;Y8&quot;, &quot;X9&quot;, &quot;Y10&quot;)
1243 :     </pre></div>
1244 :    
1245 :     <p>위 명령문에서 <code>paste()</code>라는 함수는 <code>c(&quot;X&quot;, &quot;Y&quot;)</code>라는 문자형 벡터와 <code>1:10</code>이라는 숫자형
1246 :     벡터를 하나로 묶어 문자형 벡터를 생성하는데, 두 벡터의 길이가 다르므로 <code>c(&quot;X&quot;, &quot;Y&quot;)</code>가 5번 반복되게 될
1247 :     것입니다. 또, 구분자가 <code>sep=&quot;&quot;</code>로 지정 되었으므로 두 문자 사이에는 아무런 공백이 없을 것입니다. 따라서, 위 명령문의
1248 : gnustats 1220 수행 결과는 아래와 같습니다. <a name="DOCF8" href="#FOOT8"><sup>8</sup></a>
1249 : gnustats 1203 </p>
1250 :     <hr>
1251 : gnustats 1251 <a name="g_t_00ec_009d_00b8_00eb_008d_00b1_00ec_008a_00a4-_00eb_00b2_00a1_00ed_0084_00b0"></a>
1252 : gnustats 1203 <a name="i_002ce_002b_002di_0024_003f-e2_00a1i_00b0eY_003d1_002f4-i_0021i_00a9i-e_00b0i_0027i_00b0i-i-i-ie31_002f4-ii-"></a>
1253 :     <h3 class="section">2.7 인덱스 벡터를 사용한 데이터셋의 선택과 수정</h3>
1254 :     <a name="index-Indexing-vectors"></a>
1255 :    
1256 :     <p>벡터의 이름 바로 뒤에 대괄호(<code>[]</code>)와 함께 사용된 <em>index vector</em>(인덱스 벡터)를 통해 벡터의 일부
1257 :     구성 요소만 선택하는 것이 가능합니다. 여기서 인덱스 벡터란 대괄호 내부에 쓰인 벡터를 의미 합니다.좀 더 일반적으로 말하면, 연산의
1258 :     결과로 벡터를 생성하게 되는 어떠한 표현식이라도 표현식 바로 다음에 대괄호와 함께 인덱스 벡터를 사용해서 벡터 구성요소 중 일부만
1259 :     선택하는 것이 가능합니다.
1260 :     </p>
1261 :    
1262 :     <p>이러한 인덱스 벡터에는 다음과 같은 네가지 유형이 있습니다.
1263 :     </p>
1264 :     <ol>
1265 :     <li> <strong>논리형 인덱스 벡터</strong>: 이 경우는 인덱스 벡터는 반드시 선택할 구성요소를 포함한 벡터와 길이가 같아야 합니다. 인덱스
1266 :     벡터에서 <code>TRUE</code>에 대응하는 요소들만 선택되고, <code>FALSE</code>에 대응하는 요소들은 제거될 것입니다. 예를 들면,
1267 :     아래의 명령문은 <code>x</code> 벡터 중 결측치가 아닌 요소들만을 원래의 순서대로 포함하는 객체 <code>y</code>를 생성합니다. 만약
1268 :     <code>x</code>에 결측치가 포함되어 있다면 새로 생성된 <code>y</code>의 길이는 <code>x</code> 보다 짧을 것입니다.
1269 :    
1270 :     <div class="example">
1271 :     <pre class="example">&gt; y &lt;- x[!is.na(x)]
1272 :     </pre></div>
1273 :    
1274 :     <p>다음은 또 다른 예제입니다. 아래의 명령어는 <code>x</code>의 구성요소들 중 결측치가 아니면서 양수인 요소들만을 모으로 이들에 각각 1을
1275 :     더하여 객체 <code>z</code>를 생성합니다.
1276 :     </p>
1277 :     <div class="example">
1278 :     <pre class="example">&gt; (x+1)[(!is.na(x)) &amp; x&gt;0] -&gt; z
1279 :     </pre></div>
1280 :    
1281 :     <p>creates an object <code>z</code> and places in it the values of the vector
1282 :     <code>x+1</code> for which the corresponding value in <code>x</code> was both
1283 :     non-missing and positive.
1284 :     </p>
1285 :     </li><li> <strong>양의 정수 인덱스 벡터</strong>: 이 경우의 인덱스 벡터는 반드시 {1, 2, &hellip;, <code>length(x)</code>}
1286 :     범위 내에 있어야 합니다. 선택된 구성요소들은 인덱스 벡터에서 <em>지정한 순서</em> 대로 선택되어 하나로 묶여지게 됩니다. 선택된
1287 :     결과는 사용된 인덱스 벡터의 길이와 같으며, 인덱스 벡터의 길이는 임의로 선택 가능합니다. 예를 들어, <code>x[6]</code>는
1288 :     <code>x</code>의 여섯번째 구성요소를 선택하며, 아래 명령문은 (<code>x</code>의 길이가 10보다 작지만 않다면,) <code>x</code>가
1289 :     가진 구성요소 중 처음 10개의 요소들을 선택 합니다.
1290 :    
1291 :     <div class="example">
1292 :     <pre class="example">&gt; x[1:10]
1293 :     </pre></div>
1294 :    
1295 :     <p>또, 아래의 명령문은 (물론 이렇게 어렵게 사용하는 경우는 거의 없지만) <code>&quot;x&quot;, &quot;y&quot;, &quot;y&quot;, &quot;x&quot;</code>가 4번씩 반복되어
1296 :     구성된 전체 길이 16인 문자형 벡터를 생성 합니다.
1297 :     </p>
1298 :     <div class="example">
1299 :     <pre class="example">&gt; c(&quot;x&quot;,&quot;y&quot;)[rep(c(1,2,2,1), times=4)]
1300 :     </pre></div>
1301 :    
1302 :     <p>(an admittedly unlikely thing to do) produces a character vector of length
1303 :     16 consisting of <code>&quot;x&quot;, &quot;y&quot;, &quot;y&quot;, &quot;x&quot;</code> repeated four times.
1304 :     </p>
1305 :     </li><li> <strong>음의 정수 인덱스 벡터</strong>: 이 경우, 인덱스 벡터는 선택된 요소들을 포함하는 것이 아니라 <em>제외</em>할 목적으로
1306 :     사용됩니다. 따라서, 아래 명령문은 <code>x</code>의 처음 5개의 구성요소들만 제외시켜 <code>y</code>를 생성 합니다.
1307 :    
1308 :     <div class="example">
1309 :     <pre class="example">&gt; y &lt;- x[-(1:5)]
1310 :     </pre></div>
1311 :    
1312 :     <p>gives <code>y</code> all but the first five elements of <code>x</code>.
1313 :     </p>
1314 :     </li><li> <strong>문자형 인덱스 벡터</strong>: 이 경우는 객체의 각 구성요소들이 <code>names</code>라는 속성(i.e.객체 안의 각
1315 :     구성요소(변수)의 이름)을 가지고 있을 때에만 인덱스 벡터의 이용이 가능합니다. 이때, <code>names</code>를 한 데 묶어 나열한
1316 :     벡터를 네임벡터 (names vector)라고하며, 위에서 설명한 양의 정수 인덱스 벡터와 동일한 방식으로 사용하면 됩니다.다음의 예제를
1317 :     ë³´ë©´, 우선 <code>fruit</code>이라는 수치형 벡터에 <code>names()</code> 라는 함수를 이용하여 각각의 구성요소에
1318 :     <code>&quot;orange&quot;, &quot;banana&quot;, &quot;apple&quot;, &quot;peach&quot;</code>라는 <code>names</code> 속성을 부여합니다.이제, 만약
1319 :     <code>fruit</code> 벡터의 세번째와 첫번째 요소를 선택하고 싶다면, <code>[c(&quot;apple&quot;,&quot;orange&quot;)]</code>를 사용하면
1320 :     됩니다.
1321 :    
1322 :     <div class="example">
1323 :     <pre class="example">&gt; fruit &lt;- c(5, 10, 1, 20)
1324 :     &gt; names(fruit) &lt;- c(&quot;orange&quot;, &quot;banana&quot;, &quot;apple&quot;, &quot;peach&quot;)
1325 :     &gt; lunch &lt;- fruit[c(&quot;apple&quot;,&quot;orange&quot;)]
1326 :     </pre></div>
1327 :    
1328 :     <p>이렇게 영문과 숫자의 조합(alphanumeric)인 <em>names</em>를 이용할 경우 <em>수치형 인덱스</em>를 이용하여
1329 :     구성요소를 선택할 때 보다 기억하기에 편리하다는 장점이 있습니다. 이 옵션은 특히 나중에 설명하게 될 데이터 프레임과 연관이 있습니다.
1330 :     </p>
1331 :     </li></ol>
1332 :    
1333 :     <p>인덱스를 사용한 표현식은 벡터의 일부 구성요소에 새로운 값을 할당하기 위한 목적으로도 사용 되는데,이 경우 주로 인덱스 벡터를 적용한
1334 :     벡터 ê·¸ 자신이 할당의 대상이 됩니다. 여기서 표현식은 반드시<code>vector[<var>index_vector</var>]</code>의 형태로
1335 :     사용되야 하며, 네임벡터의 위치에 어떠한 표현식이든 자유롭게 사용될 수 있는 것은 아닙니다. 예제를 통해 살펴보면, 다음과 같은 명령문을
1336 :     사용하면 <code>x</code>에서 결측값이 있는 위치를 확인하여 이 위치의 결측값에 0을 할당 하는 것이 가능합니다.
1337 :     </p>
1338 :     <p>다음의 예시를 살펴봅니다.
1339 :     </p>
1340 :     <div class="example">
1341 :     <pre class="example">&gt; x[is.na(x)] &lt;- 0
1342 :     </pre></div>
1343 :    
1344 :     <p>또 다음의 예제에서는 <code>y</code>의 값들 중 0 보다 작은 값들을 찾고 이들의 부호를 바꿔줍니다.
1345 :     </p>
1346 :     <div class="example">
1347 :     <pre class="example">&gt; y[y &lt; 0] &lt;- -y[y &lt; 0]
1348 :     </pre></div>
1349 :    
1350 :     <p>결과적으로 위의 예제는 아래의 명령문을 수행한 것과 같은 결과를 얻습니다.
1351 :     </p>
1352 :     <div class="example">
1353 :     <pre class="example">&gt; y &lt;- abs(y)
1354 :     </pre></div>
1355 :    
1356 :     <hr>
1357 : gnustats 1251 <a name="g_t_00ea_00b0_009d_00ec_00b2_00b4_00ec_009d_0098-_00eb_008b_00a4_00eb_00a5_00b8-_00ec_009c-_00ed_0098_0095_00eb_0093_00a4"></a>
1358 :     <a name="e_00b0i2_0027i-e_0024_003feY_003d_002c-i-ie_0024_003f"></a>
1359 :     <h3 class="section">2.8 객체의 다른 유형들</h3>
1360 : gnustats 1203
1361 :     <p>벡터는 R에서 가장 중요한 객체입니다. 하지만 이번 섹션에서는 다른 유형의 객체들에 대해 간단히 소개하도록 하겠습니다.
1362 :     </p>
1363 :     <ul>
1364 :     <li> <em>matrices</em>(행렬) 또는 좀 더 일반적으로 <em>arrays</em>(배열)이라는 것은 1차원인 벡터를 다차원으로
1365 :     일반화시킨 것 입니다. 실제로, 행렬과 배열은 두개 또는 ê·¸ 이상의 인덱스를 사용하여 표현되는 <em>벡터</em>로 ë³¼ 수 있으며, 정해진
1366 : gnustats 1235 형태로 출력될 것입니다. See <a href="#Arrays-and-matrices-_0028_00eb_00b0_00b0_00ec_0097_00b4_00ea_00b3_00bc-_00ed_0096_0089_00eb-_00ac_0029">Arrays and matrices (배열과 행렬)</a>.
1367 : gnustats 1203
1368 :     </li><li> <em>factors</em>(요인)을 이용하면 범주형 자료(categorical data)를 간단하게 다룰 수
1369 : gnustats 1235 있습니다. See <a href="#Factors-_0028_00ec_009a_0094_00ec_009d_00b8_0029">Factors (요인)</a>.
1370 : gnustats 1203
1371 :     </li><li> <em>lists</em>는 가장 일반적인 형태의 벡터로 각 구성요소들이 같은 데이터 형태로 되어야한다는 제약이 없으며, 종종 벡터나
1372 :     리스트를 ê·¸ 자체로 포함하기도 합니다. 또한 리스트는 통계연산의 결과를 편리하게 출력하기 위해 사용될 수도
1373 : gnustats 1235 있습니다. See <a href="#Lists-_0028_00eb_00a6_00ac_00ec_008a_00a4_00ed_008a_00b8_0029">Lists (리스트)</a>.
1374 : gnustats 1203
1375 :     </li><li> <em>data frames</em>은 행렬과 비슷한 구조를 가지고 있지만, 각각의 열이 다른 데이터 형태일 수 있습니다. 데이터 프레임은,
1376 :     각 행이 하나의 관측 단위이고 각 열은 이 관측단위에서 얻어진 연속형 또는 이산형 변수인 &lsquo;데이터 행렬&rsquo;이라고 생각해도 무방할 것
1377 :     입니다. 예를들어, 실험의 처리 수준을 범주화(categorical)해서 나타내고, 각 처리에서 얻어진 결과물(반응 변수)은 연속형일
1378 : gnustats 1235 경우, 데이터 프레임을 사용하는 것이 이 실험을 가장 잘 기록할 수 있는 방법일 것입니다. See <a href="#Data-frames-_0028_00eb_008d_00b0_00ec_009d_00b4_00ed_0084_00b0-_00ed_0094_0084_00eb-_0088_00ec_009e_0084_0029">Data frames (데이터 프레임)</a>.
1379 : gnustats 1203
1380 :     </li><li> R에서 <em>functions</em>(함수)는 ê·¸ 자체로 프로젝트의 작업공간 내에 저장 될 수 있는 객체이기도 합니다. 함수의
1381 : gnustats 1237 사용은 R의 기능을 좀 더 간편하게 확장할 수 있게 합니다. See <a href="#Writing-your-own-functions-_0028_00ec_0082_00ac_00ec_009a_00a9_00ec_009e_0090-_00ec-_0095_00ec_009d_0098_00ed_0095_00a8_00ec_0088_0098-_00ec_009e_0091_00ec_0084_00b1_00ed_0095_0098_00ea_00b8_00b0_0029">Writing your own functions (사용자 정의함수 작성하기)</a>.
1382 : gnustats 1203
1383 :     </li></ul>
1384 :    
1385 :     <hr>
1386 : gnustats 1235 <a name="Objects"></a>
1387 : gnustats 1251 <a name="e_00b0i2_0027i-i-iY_003de_00b0_00a9ie31_002f4-ii_002b_002d"></a>
1388 :     <h2 class="chapter">3 객체의 저장방식과 속성</h2>
1389 : gnustats 1235 <a name="index-Objects"></a>
1390 : gnustats 1203 <a name="index-Attributes"></a>
1391 :    
1392 :    
1393 :    
1394 :     <hr>
1395 :     <a name="The-intrinsic-attributes-mode-and-length"></a>
1396 : gnustats 1251 <a name="e3-i-ii_002b_002d_003a-i-iY_003de_00b0_00a9e2-e_002a_002ce_007c_0021e3-e_002c_002ci_0027"></a>
1397 :     <h3 class="section">3.1 고유속성: 저장방법 그리고 길이</h3>
1398 : gnustats 1203
1399 :     <p>R에서 정보처리 (연산 및 수행)의 기본단위는 전문용어로 <em>objects</em>(객체)라고 부르는 요소들입니다.이러한 객체의
1400 :     종류에는 (실수) 수치형 및 복소수형, 논리형 그리고 문자형 벡터등이 있습니다.이러한 벡터의 구조를 &ldquo;atomic&rdquo; 이라고 하는데,
1401 : gnustats 1220 그 이유는 이들 벡터의 구성요소는 반드시 <em>numeric</em> <a name="DOCF9" href="#FOOT9"><sup>9</sup></a>, <em>complex</em>, <em>logical</em>, <em>character</em>, 그리고 <em>raw</em> 중
1402 : gnustats 1203 하나의 타입 혹은 <em>mode</em>(모드)로만 되어있기 때문입니다.
1403 :     </p>
1404 :     <p>벡터는 반드시 <em>같은 모드에서 나온</em> 값들로만 이루어져야 합니다.따라서 어떠한 벡터라도 반드시
1405 :     <em>logical</em>(논리형), <em>numeric</em>(수치형), <em>complex</em>(복소수형),
1406 :     <em>character</em>(문자형) 또는 <em>raw</em> 중의 하나의 모드이어야 합니다.(이 규칙에 대한 유일하고 명백한 예외가
1407 :     있다면 그것은 <code>NA</code>로 표기되는 결측값일 것 입니다.하지만, 사실 여러 이유로 <code>NA</code> 값이 생성 됩니다).벡터는
1408 :     empty(아무런 구성요소 없이 비어 있는) 상태라고 하더라도 모드를 가질 수 있습니다. 예를들어, 비어있는 문자열 벡터
1409 :     <code>character(0)</code>나, 비어있는 수치형 벡터 <code>numeric(0)</code> 등이 있습니다.
1410 :     </p>
1411 :     <p>R은 또한 <em>list</em>(리스트)라는 모드를 가진 <em>lists</em>(리스트) 객체들을 대상으로 연산을 수행할 수
1412 :     있습니다. 리스트에는 동일하지 않은 모드를 가진 여러 객체들을 일정한 순서대로 나열할 수 있습니다. <em>lists</em>(리스트)는
1413 :     또한 atomic structure (가장 단순한 기본구조)이기 보다는 &ldquo;recursive&rdquo;(재귀)구조를 가지는데, ê·¸ 이유는
1414 :     리스트의 구성요소 ê·¸ 자체가 리스트 안에 포함될 수 있기 때문입니다.
1415 :     </p>
1416 :     <p>또 다른 재귀구조는 모드가 <em>function</em>(함수) 또는 <em>expression</em>(표현식)인 경우 입니다.함수는 나중에
1417 :     설명하게 될 사용자 정의 함수와 함께 R 시스템의 일부를 구성하는 객체입니다.표현식은 R에서 모델링에 사용되는
1418 :     <em>formulae</em>(공식)을 언급할 때 간접적으로 등장하는 것을 제외하고는 이 문서에서는 다루지 않을 것이지만, 이 역시
1419 :     R시스템의 고급 활용을 위해 필요한 객체 입니다.
1420 :     </p>
1421 :     <p>한 객체의 <em>mode</em>(모드)를 확인하여, 우리는 이 객체를 구성하는 요소들의 기본형(basic type)을 알 수
1422 :     있습니다. 모드는 한 객체의 속성 (property) 중 특별한 하나의 예 입니다. 모든 객체가 갖는 또 다른 속성에
1423 :     <em>length</em>(길이)가 있습니다.명령문 <code>mode(<var>object</var>)</code>와
1424 : gnustats 1220 <code>mode(<var>object</var>)</code>를 사용하여 객체의 모드와 길이를 알 수 있습니다. <a name="DOCF10" href="#FOOT10"><sup>10</sup></a>
1425 : gnustats 1203 </p>
1426 :     <p>객체에 대한 더 많은 속성들은 <code>attributes(<var>object</var>)</code>를 사용해서 ë³¼ 수 있으며, 궁금한 점은
1427 : gnustats 1244 <a href="#Getting-and-setting-attributes-_0028_00ec_0086_008d_00ec_0084_00b1_00ec_009d_0084-_00ec_0084_00a4_00ec-_0095_00ed_0095_0098_00ea_00b3-_00ed_0099_0095_00ec_009d_00b8_00ed_0095_0098_00ea_00b8_00b0_0029">Getting and setting attributes (속성을 설정하고 확인하기)</a>를 참고하시길 바랍니다.이러한 이유로,
1428 :     <em>mode</em>(모드)와 <em>length</em>(길이)는 객체의 &ldquo;intrinsic attributes&rdquo;(본질적 속성)이라고
1429 :     합니다.
1430 : gnustats 1203 <a name="index-mode"></a>
1431 :     <a name="index-length-1"></a>
1432 :     </p>
1433 :     <p>예를 들어, 만약 <code>z</code>가 길이 100인 복소수형 벡터라고 한다면, 표현식 <code>mode(z)</code>는 문자열
1434 :     <code>&quot;complex&quot;</code>(복소수)을 출력하고, <code>length(z)</code>은 <code>100</code>을 출력 합니다.
1435 :     </p>
1436 :     <p>R에서는 어디든 필요한 곳에서 모드를 변경할 수 있습니다. 예제를 통해 살펴보면,
1437 :     </p>
1438 :     <div class="example">
1439 :     <pre class="example">&gt; z &lt;- 0:9
1440 :     </pre></div>
1441 :    
1442 :     <p>위에서 생성한 0 부터 9까지의 숫자로 이루어진 수열 <code>z</code>는 <code>c(&quot;0&quot;, &quot;1&quot;, &quot;2&quot;, &hellip;,
1443 :     &quot;9&quot;)</code>의 값을 갖는 문자형 벡터 digits으로 전환될 수 있습니다.
1444 :     </p>
1445 :     <div class="example">
1446 :     <pre class="example">&gt; digits &lt;- as.character(z)
1447 :     </pre></div>
1448 :    
1449 :     <p>이 문자형 벡터는 다음과 같은 방법으로 수치형 벡터로 <em>coercion</em>(강제형변환) 또는 모드 변환할 수 있습니다:
1450 :     </p>
1451 :     <div class="example">
1452 :     <pre class="example">&gt; d &lt;- as.integer(digits)
1453 :     </pre></div>
1454 :    
1455 : gnustats 1220 <p>이제 <code>d</code>와 <code>z</code>는 동일한 벡터 입니다.<a name="DOCF11" href="#FOOT11"><sup>11</sup></a> 이와 같이 객체의 모드를 변경하거나, 한 객체가 현재 지정된 모드 이외의 다른 속성을 가질 수 있는지 확인하기 위해
1456 : gnustats 1203 <code>as.<var>something</var></code> 형태의 다양한 함수 모음을 이용할 수 있습니다.이러한 함수들을 능숙하게 사용하기 위해서는
1457 :     다양한 도움말이 필요할 것 입니다.
1458 :     </p>
1459 :    
1460 :     <hr>
1461 : gnustats 1251 <a name="g_t_00ea_00b0_009d_00ec_00b2_00b4_00ec_009d_0098-_00ea_00b8_00b8_00ec_009d_00b4-_00eb_00b3_0080_00ea_00b2_00bd"></a>
1462 :     <a name="e_00b0i2_0027i-e_002c_002ci_0027-e3e21_002f2"></a>
1463 :     <h3 class="section">3.2 객체의 길이 변경</h3>
1464 : gnustats 1203
1465 :     <p>An &ldquo;empty&rdquo; object may still have a mode. For example
1466 :     </p>
1467 :     <div class="example">
1468 :     <pre class="example">&gt; e &lt;- numeric()
1469 :     </pre></div>
1470 :    
1471 :     <p>위의 명령문은 수치형 모드를 갖는 비어있는 벡터 <code>e</code>를 생성합니다.마찬가지로, <code>character()</code>은 비어있는
1472 :     문자형 벡터를 생성합니다.일단 임의의 크기를 갖는 객체가 생성하고 나면,이전 범위 밖에 인덱스 값을 지정하는 것으로 새 구성요소를
1473 :     간단히 추가할 수 있습니다.
1474 :     </p>
1475 :     <div class="example">
1476 :     <pre class="example">&gt; e[3] &lt;- 17
1477 :     </pre></div>
1478 :    
1479 :     <p>위의 명령문으로 길이가 3인 벡터 <code>e</code>가 생성 됩니다. (별도 지정이 없었으므로, 처음 두 개의 구성요소들은
1480 :     <code>NA</code>가 될 것입니다.) 이런 방식으로 구성요소를 추가하는 것은 새로 추가되는 구성요소가 이미 존재하는 구성요소들과 모드만
1481 :     일치한다면, 어떤 구조의 객체라도 모두 적용 가능합니다.
1482 :     </p>
1483 :     <p>때로는, 데이터를 입력할 때 사용하는 <code>scan()</code> 함수처럼, 자동적으로 객체의 길이가 조정될 때가 있습니다.
1484 :     </p>
1485 :     <p>반대로, 객체의 크기를 직접 조정하고 싶다면, 그렇게 하기 위한 할당문을 사용하면 됩니다.예를들어, 길이가 10인
1486 :     <code>alpha</code>라는 객체가 있다면,아래의 할당문은 길이가 5이고, 이전 <code>alpha</code>의 구성성분 중 짝수번 째에 해당하는
1487 :     요소들만을 선택하여 새로운 객체인 <code>alpha</code>를 생성합니다. (이전 인덱스는 더 이상 남아있지 않습니다.)
1488 :     </p>
1489 :     <div class="example">
1490 :     <pre class="example">&gt; alpha &lt;- alpha[2 * 1:5]
1491 :     </pre></div>
1492 :    
1493 :     <p>이 중 처음 세 개의 구성요소만을 포함하는 <code>alpha</code>를 생성하고자하면, 다음 문장과 같이 하면 됩니다.
1494 :     </p>
1495 :     <div class="example">
1496 :     <pre class="example">&gt; length(alpha) &lt;- 3
1497 :     </pre></div>
1498 :    
1499 :     <p>비슷한 방법으로 벡터의 길이를 늘리는 것도 가능합니다. (늘어난 길이만큼 결측값으로 채워지겠지만요.)
1500 :     </p>
1501 :     <hr>
1502 : gnustats 1244 <a name="Getting-and-setting-attributes-_0028_00ec_0086_008d_00ec_0084_00b1_00ec_009d_0084-_00ec_0084_00a4_00ec-_0095_00ed_0095_0098_00ea_00b3-_00ed_0099_0095_00ec_009d_00b8_00ed_0095_0098_00ea_00b8_00b0_0029"></a>
1503 :     <a name="Getting-and-setting-attributes-_0028ii_002b_002di-i_0024_003fi-ie3-ii_002cie_002c_00b0_0029"></a>
1504 :     <h3 class="section">3.3 Getting and setting attributes (속성을 설정하고 확인하기)</h3>
1505 : gnustats 1203 <a name="index-attr"></a>
1506 :     <a name="index-attributes"></a>
1507 :    
1508 :     <p>함수 <code>attributes(<var>object</var>)</code>는 해당 객체에 현재 지정되어 있는 모든 (내재형이
1509 :     아닌,non-intrinsic) 속성들을 리스트로 나열해 줍니다.
1510 :     <a name="index-attributes-1"></a>
1511 :     또 함수 <code>attr(<var>object</var>, <var>name</var>)</code>는 객체의 좀 더 구체적인 속성을 선택하는데 사용 됩니다.
1512 :     <a name="index-attr-1"></a>
1513 :     그러나, 이러한 함수들은, R 객체에 작성날짜나 특별한 연산자를 연결시킬 때와 같은 아주 특별한 경우를 제외하고는 거의 사용되지
1514 :     않습니다. 하지만, 이와 관련된 개념을 알아두는 것은 매우 중요합니다.
1515 :     </p>
1516 :     <p>객체에 속성을 새로 추가하거나 삭제할 때는 특별히 주의를 기울이시길 바랍니다. 이런 속성 변경의 대상이 되는 객체들이 R에서
1517 :     사용되는 객체 시스템의 매우 중요한 부분이기 때문입니다.
1518 :     </p>
1519 :     <p>할당문의 좌측에 함수 <code><var>object</var></code>를 사용하면, 새로운 속성을 할당하거나 존재하는 속성을 변경할 수
1520 :     있습니다. 아래와 같이 입력하면, R은 벡터 <code>z</code>를 마치 크기가 10행 10열인 행렬처럼 다룰 수 있게 됩니다.
1521 :     </p>
1522 :     <div class="example">
1523 :     <pre class="example">&gt; attr(z, &quot;dim&quot;) &lt;- c(10,10)
1524 :     </pre></div>
1525 :    
1526 :     <p>allows R to treat <code>z</code> as if it were a 10-by-10 matrix.
1527 :     </p>
1528 :     <hr>
1529 : gnustats 1251 <a name="g_t_00ea_00b0_009d_00ec_00b2_00b4_00ec_009d_0098-_00ed_0081_00b4_00eb_009e_0098_00ec_008a_00a4"></a>
1530 :     <a name="e_00b0i2_0027i-i_0027ei_0024_003f"></a>
1531 :     <h3 class="section">3.4 객체의 클래스</h3>
1532 : gnustats 1203 <a name="index-Classes"></a>
1533 :    
1534 :     <p>R에 존재하는 모든 객체들은 <em>class</em>(클래스)라는 것을 갖습니다.이 클래스의 종류는 함수 <code>class</code>를
1535 :     사용해서 확인할 수 있습니다.간단한 벡터의 경우, 클래스는 <code>&quot;numeric&quot;</code>, <code>&quot;logical&quot;</code>,
1536 :     <code>&quot;character&quot;</code> 또는 <code>&quot;list&quot;</code>와 같이 단순히 벡터의 모드를 의미 합니다.그러나,
1537 :     <code>&quot;matrix&quot;</code>, <code>&quot;array&quot;</code>, <code>&quot;factor&quot;</code> 그리고 <code>&quot;data.frame&quot;</code>는
1538 :     클래스로 다른 값을 가질 수 있습니다.
1539 :     </p>
1540 :     <p>객체의 <em>class</em>(클래스)가 가진 특별한 속성 중 하나는 R의 object-oriented style (객체지향스타일)
1541 : gnustats 1220 <a name="DOCF12" href="#FOOT12"><sup>12</sup></a> 프로그래밍을 가능하게 한다는 점입니다.예를 들어, 만약 객체가 <code>&quot;data.frame&quot;</code>을 그 클래스로
1542 : gnustats 1203 가진다면,이 객체를 출력은 정해진 특정한 방식대로 이루어집니다. 이 객체에 <code>plot()</code> 함수를 적용할 경우, 이미 정해진
1543 :     그래픽의 형태로 시각화하게 되고, 또 <code>summary()</code>와 같이 일반(generic)함수를 사용할 경우, 객체가 가지고 있는
1544 :     클래스를 인자의 형태로 받아, 클래스에 따른 정의대로 결과물을 출력합니다.
1545 :     </p>
1546 :     <p>클래스 효과를 일시적으로 제거하기 위해서는 <code>unclass()</code>라는 함수를 사용하면 됩니다.
1547 :     <a name="index-unclass"></a>
1548 :     예를들어 만약 <code>winter</code>라는 객체가 클래스 <code>&quot;data.frame&quot;</code>(데이터 프레임)을 가지고 있다면, 아래의
1549 :     명령문을 실행하면 행렬이라기 보다는 데이터 프레임의 형식을 갖추어 데이터를 출력하게 됩니다.
1550 :     </p>
1551 :     <div class="example">
1552 :     <pre class="example">&gt; winter
1553 :     </pre></div>
1554 :    
1555 :     <p>반면에 아래의 명령문을 실행해서 클래스 효과를 지우면 일반적인 리스트의 형식으로 출력됩니다.
1556 :     </p>
1557 :     <div class="example">
1558 :     <pre class="example">&gt; unclass(winter)
1559 :     </pre></div>
1560 :    
1561 :     <p>이러한 클래스의 활용은 매우 특별한 경우에 한해서만 필요하므로, 여기서는 단순히 클래스와 일반함수의 기본 개념에만 익숙해지면 됩니다.
1562 :     </p>
1563 : gnustats 1244 <p>일반함수와 클래스에 대해서는 <a href="#Object-orientation-_0028_00ea_00b0_009d_00ec_00b2_00b4_00ec_00a7_0080_00ed_0096_00a5_00ec-_0081-_00eb_00b0_00a9_00eb_00b2_0095_0029">Object orientation (객체지향적 방법)</a> 부분에서 더 자세히 다루겠지만, 여기에서는
1564 :     이쯤에서 간단히 마치겠습니다.
1565 : gnustats 1203 </p>
1566 :     <hr>
1567 : gnustats 1235 <a name="Factors-_0028_00ec_009a_0094_00ec_009d_00b8_0029"></a>
1568 : gnustats 1252 <a name="iiie31_002f4-e1iii-ii_002c"></a>
1569 :     <h2 class="chapter">4 순서형과 비순서형 요인</h2>
1570 : gnustats 1235 <a name="index-Factors-_0028ii_002c_0029"></a>
1571 : gnustats 1252 <a name="index-iii-ii_002c"></a>
1572 : gnustats 1203
1573 :     <p><em>factor</em>(요인)은 같은 길이를 가진 다른 벡터의 다른 구성요소들을 이산형으로 구분(Classification) 또는
1574 :     그룹핑(grouping)된 것을 표현해주는 벡터형 객체입니다.R에서는 <em>ordered</em>(순서형)ê³¼
1575 :     <em>unordered</em>(비순서형) 요인을 모두 사용 가능합니다.요인의 활용이 정말 필요한 것은 see <a href="#Contrasts">Contrasts</a>
1576 :     부분에서 설명할 model formulae(모형 공식)을 사용할 때이지만, 여기에서는 좀 더 간단한 예제를 우선 다루겠습니다.
1577 :     </p>
1578 : gnustats 1235 <a name="eu_0021i2_0027i-i_002c-ii-"></a>
1579 :     <h3 class="section">4.1 구체적인 예제</h3>
1580 : gnustats 1203
1581 :     <p>예를들어, Australia(오스트레일리아, 호주)의 모든 지역(호주에는 Australian Capital Territory, New
1582 :     South Wales, the Northern Territory, Queensland, South Australia, Tasmania,
1583 :     Victoria and Western Australia 라는 총 8개의 행정 구역이 있습니다)으로부터 온 30명의 회계사 샘플과 그들의
1584 :     출신 지역에 대한 정보가 문자형 벡터인 state에 약자로 다음과 같이 기록되어있습니다.
1585 :     </p>
1586 :     <div class="example">
1587 :     <pre class="example">&gt; state &lt;- c(&quot;tas&quot;, &quot;sa&quot;, &quot;qld&quot;, &quot;nsw&quot;, &quot;nsw&quot;, &quot;nt&quot;, &quot;wa&quot;, &quot;wa&quot;,
1588 :     &quot;qld&quot;, &quot;vic&quot;, &quot;nsw&quot;, &quot;vic&quot;, &quot;qld&quot;, &quot;qld&quot;, &quot;sa&quot;, &quot;tas&quot;,
1589 :     &quot;sa&quot;, &quot;nt&quot;, &quot;wa&quot;, &quot;vic&quot;, &quot;qld&quot;, &quot;nsw&quot;, &quot;nsw&quot;, &quot;wa&quot;,
1590 :     &quot;sa&quot;, &quot;act&quot;, &quot;nsw&quot;, &quot;vic&quot;, &quot;vic&quot;, &quot;act&quot;)
1591 :     </pre></div>
1592 :    
1593 :     <p>문자형 벡터의 경우에는 &ldquo;sorted&rdquo;(정렬)이라는 것은 알파벳순서로 나열된 것을 의미합니다.
1594 :     </p>
1595 :     <p>여기에 대한 <em>factor</em>(요인)은 <code>factor()</code> 함수를 이용하여 아래와 같이 생성합니다:
1596 : gnustats 1252 <a name="index-factor"></a>
1597 : gnustats 1203 </p>
1598 :     <div class="example">
1599 :     <pre class="example">&gt; statef &lt;- factor(state)
1600 :     </pre></div>
1601 :    
1602 :     <p><code>print()</code> 함수를 사용해서 요인을 출력할 경우, 다른 객체들과는 다소 다른 방식으로 출력됩니다:
1603 :     </p>
1604 :     <div class="example">
1605 :     <pre class="example">&gt; statef
1606 :     [1] tas sa qld nsw nsw nt wa wa qld vic nsw vic qld qld sa
1607 :     [16] tas sa nt wa vic qld nsw nsw wa sa act nsw vic vic act
1608 :     Levels: act nsw nt qld sa tas vic wa
1609 :     </pre></div>
1610 :    
1611 :     <p>요인의 수준(levels)을 확인하기 위해서는 함수 <code>levels()</code>를 사용하면 됩니다.
1612 : gnustats 1252 <a name="index-levels"></a>
1613 : gnustats 1203 </p>
1614 :     <div class="example">
1615 :     <pre class="example">&gt; levels(statef)
1616 :     [1] &quot;act&quot; &quot;nsw&quot; &quot;nt&quot; &quot;qld&quot; &quot;sa&quot; &quot;tas&quot; &quot;vic&quot; &quot;wa&quot;
1617 :     </pre></div>
1618 :    
1619 :    
1620 :     <hr>
1621 : gnustats 1235 <a name="The-function-tapply_0028_0029-and-ragged-arrays"></a>
1622 : gnustats 1252 <a name="i_0022i-tapply_0028_0029i-e1i-i-e_00b0_00b0i_0027"></a>
1623 :     <h3 class="section">4.2 함수 <code>tapply()</code>와 비정형 배열</h3>
1624 : gnustats 1203 <a name="index-tapply"></a>
1625 :    
1626 :     <p>앞부분에서 사용된 예제를 계속해서, 이제 30명의 회계사의 수입(income)에 대한 정보가 아래와 같이 벡터로 (적당한 화폐단위로
1627 :     기록되어) 제공되었다고 가정합시다.
1628 :     </p>
1629 :     <div class="example">
1630 :     <pre class="example">&gt; incomes &lt;- c(60, 49, 40, 61, 64, 60, 59, 54, 62, 69, 70, 42, 56,
1631 :     61, 61, 61, 58, 51, 48, 65, 49, 49, 41, 48, 52, 46,
1632 :     59, 46, 58, 43)
1633 :     </pre></div>
1634 :    
1635 :     <p>각 주(state) 별 평균소득을 계산하고 싶다면 아래와 같이 <code>tapply()</code> 함수를 사용하면 됩니다.
1636 :     </p>
1637 :     <div class="example">
1638 :     <pre class="example">&gt; incmeans &lt;- tapply(incomes, statef, mean)
1639 :     </pre></div>
1640 :    
1641 :     <p>위 명령어를 실행하면 아래와 같이 (state의) 각 수준(levels)에 해당하는 평균이 벡터로 출력 됩니다.
1642 :     </p>
1643 :     <div class="example">
1644 :     <pre class="example"> act nsw nt qld sa tas vic wa
1645 :     44.500 57.333 55.500 53.600 55.000 60.500 56.000 52.250
1646 :     </pre></div>
1647 :    
1648 :     <p>함수 <code>tapply()</code>를 사용하면 이 함수의 첫번째 인자인 <code>incomes</code>에 대해, 이 함수의 두번째 인자인
1649 :     <code>statef</code>에 정의된 요인의 수준별로, 세번째 인자인 함수 <code>mean()</code>을 계산합니다. 마치 각각의 두번째 요인의
1650 : gnustats 1220 수준별로 별개의 벡터가 존재하는 것 처럼 말이지요. <a name="DOCF13" href="#FOOT13"><sup>13</sup></a>따라서, 결과로 생성된 벡터의 길이는 반드시 요인 수준의 개수와 같아야 합니다.이러한 연산에 대해 더 자세히 알고 싶은 분은
1651 : gnustats 1203 도움말을 참고하시길 바랍니다.
1652 :     </p>
1653 :     <p>어쩌면 여러분은 이 예제에서 평균소득에 대한 표준오차(standard error)를 계산해보고 싶을 수도 있을 것 입니다.이를 위해,
1654 :     아래와 같이 주어진 벡터의 표준오차를 계산하는 R 함수를 작성할 수 있습니다.<code>var()</code>라는 샘플 분산을 계산하는
1655 :     빌트인(built-in) 함수가 존재하기 때문에, 이 함수는 아래와 같이 간단한 한줄짜리 함수로 표현 가능합니다:
1656 :     </p>
1657 :     <div class="example">
1658 :     <pre class="example">&gt; stderr &lt;- function(x) sqrt(var(x)/length(x))
1659 :     </pre></div>
1660 :    
1661 : gnustats 1242 <p>(함수를 작성하는 방법에 대해서는 추후에 <a href="#Writing-your-own-functions-_0028_00ec_0082_00ac_00ec_009a_00a9_00ec_009e_0090-_00ec-_0095_00ec_009d_0098_00ed_0095_00a8_00ec_0088_0098-_00ec_009e_0091_00ec_0084_00b1_00ed_0095_0098_00ea_00b8_00b0_0029">Writing your own functions (사용자 정의함수 작성하기)</a> 편에서
1662 :     다룰 것입니다. 또 위의 함수작성 예제는 실제로는 별로 의미는 없는데, R에는 이미 <code>sd()</code>라는 표준오차 계산 함수가
1663 :     포함되어 있기 때문입니다).
1664 : gnustats 1203 <a name="index-sd"></a>
1665 :     <a name="index-var-1"></a>
1666 :     위의 함수에 할당을 하면, 아래와 같이 표준오차가 계산되며,
1667 :     </p>
1668 :     <div class="example">
1669 :     <pre class="example">&gt; incster &lt;- tapply(incomes, statef, stderr)
1670 :     </pre></div>
1671 :    
1672 :     <p>ê·¸ 결과는 다음과 같습니다.
1673 :     </p>
1674 :     <div class="example">
1675 :     <pre class="example">&gt; incster
1676 :     act nsw nt qld sa tas vic wa
1677 :     1.5 4.3102 4.5 4.1061 2.7386 0.5 5.244 2.6575
1678 :     </pre></div>
1679 :    
1680 :     <p>연습삼아 state 별 평균소득에 대한 95% 신뢰구간을 구해보고 싶은 분도 있을 것입니다.이를 위해서는, <code>tapply()</code>
1681 :     함수와 함께 <code>length()</code>, <code>qt()</code>와 같은 함수들을 사용해야 할 것이라 생각되는데,
1682 :     <code>length()</code>는 샘플 크기를, <code>qt()</code>는 t-분포에서 95% 에 해당하는 분위수를 찾아주는 함수
1683 :     입니다.(참고로 R에 포함된 <em>t</em>-테스트 관련 함수들을 이용하는 것도 가능할 것입니다).
1684 :     </p>
1685 :     <p>위의 예제에서 살펴 본 <code>tapply()</code> 함수에 여러 개의 범주를 표시하기 위해 좀 더 복잡하게 표현된 인덱스 벡터를 사용하는
1686 :     것도 가능합니다. 예를들어, 위 예제에서 state 와 성별이라는 두 가지 요인을 동시에 고려하여 회계사의 수입을 ë³´ê³  싶다고
1687 :     가정합시다.이 경우, (한 개의 요인을 고려할 때 처럼) 다음과 같은 식으로 연산이 처리 됩니다.우선, 벡터의 구성요소들이 요인의 수준
1688 :     별로 그룹화 됩니다. 그리고 이 그룹화된 벡터 구성요소 별로 함수가 각각 적용 됩니다. 즉, 각 요인 수준별로 계산된 결과값에, 해당
1689 :     요인의 <code>levels</code> 속성을 각각 레이블링 하는 것 입니다.
1690 :     </p>
1691 :     <p>하나의 벡터와 하나의 레이블링 요인을 조합하는 것은 <em>ragged array</em>(비정형 배열)의 하나의 예시로 ë³¼ 수
1692 :     있는데,그것은 그룹화 된 부분의 크기가 서로 다른 경우가 대부분이기 때문입니다.만약 그룹화 된 각 부분의 크기가 모두 같다면, 다음
1693 :     섹션에서 살펴보게 될 방법을 사용하여 훨씬 효율적으로 연산을 수행할 수 있습니다.
1694 :     </p>
1695 :    
1696 :     <hr>
1697 : gnustats 1252 <a name="g_t_00ec_0088_009c_00ec_0084_009c_00ed_0098_0095-_00ec_009a_0094_00ec_009d_00b8"></a>
1698 :     <a name="iii-ii_002c"></a>
1699 :     <h3 class="section">4.3 순서형 요인</h3>
1700 : gnustats 1203 <a name="index-ordered"></a>
1701 :    
1702 :     <p>요인(factor)의 수준(levels)들은 기본적으로 알파벳 순서로 저장되지만, <code>factor</code> 함수를 이용하면 사용자가
1703 :     별도의 순서를 지정하는 것도 가능합니다.
1704 :     </p>
1705 :     <p>어떤 경우에는 수준들이 우리가 원하는대로 이미 지정되어 있거나, 통계분석 시 필요한 형태로 되어있는 경우도 있습니다.
1706 :     <a name="index-ordered-1"></a>
1707 :     <code>ordered()</code> 함수는 요인을 순서형으로 생성한다는 점을 빼면 <code>factor</code>와 다르지 않습니다.대부분의 경우,
1708 :     순서형과 비순서형 요인의 차이는 순서형 요인만 수준을 일정한 순서대로 출력하는 점 뿐이지만, 선형 모형 적합에서 요인을 이용하여
1709 :     contrasts(대조)를 생성할 경우, 서로 다른 순서가 다른 결과물을 산출하게 된다는 점을 기억하시기 바랍니다.
1710 :     </p>
1711 :    
1712 :     <hr>
1713 : gnustats 1235 <a name="Arrays-and-matrices-_0028_00eb_00b0_00b0_00ec_0097_00b4_00ea_00b3_00bc-_00ed_0096_0089_00eb-_00ac_0029"></a>
1714 :     <a name="Arrays-and-matrices-_0028e_00b0_00b0i_0027e31_002f4-ie-_0021_0029"></a>
1715 :     <h2 class="chapter">5 Arrays and matrices (배열과 행렬)</h2>
1716 : gnustats 1203
1717 :    
1718 :     <hr>
1719 : gnustats 1252 <a name="g_t_00eb_00b0_00b0_00ec_0097_00b4"></a>
1720 :     <a name="e_00b0_00b0i_0027"></a>
1721 :     <h3 class="section">5.1 배열</h3>
1722 :     <a name="index-e_00b0_00b0i_0027"></a>
1723 : gnustats 1203 <a name="index-Matrices"></a>
1724 :    
1725 :     <p>배열(array)이라는 것은 쉽게 말해 다차원상에 데이터가 저장될 수 있도록 데이터 엔트리(data entry, 데이터가 위치하는
1726 :     하나하나를 공간 또는 한개의 데이터을 의미함)를 구조화한 것 입니다. 다차원이라는 것은 우리 머릿속에 개념상으로 존재하지만, 데이터를
1727 :     일렬로 벡터와 같은 형태로 읽어들이는 컴퓨터에는 다차원의 개념이 없습니다.그래서 데이터에 다차원 구조를 주기 위해서는 이 배열이라는
1728 :     개념을 이용 해야하며, R은 행렬과 같이 일정한 형태로 된 배열을 생성하고 조작할 수 있는 간편한 기능들을 제공합니다.
1729 :     </p>
1730 :     <p>이러한 다차원 구조의 실제적인 구현을 위해서는 차원벡터 (dimension vector)라는 것을 활용하게 되는데, 이는 음의 값이 아닌
1731 :     정수(non-negative) 벡터로 되어 있습니다. 차원벡터의 길이가 <em>k</em>인 경우, 데이터는 <em>k</em>-차원의 배열이
1732 :     됩니다. 좀 더 구체적으로, 하나의 행렬은 <em>2</em>-차원 배열의 예라고 ë³¼ 수 있습니다. 각 차원(즉, 차원벡터의 구성요소)은
1733 :     양의 정수를 인덱스 값으로 갖습니다.
1734 :     </p>
1735 :     <p>R에서 배열로 사용되기 위해서는 해당 벡터의 <em>dim</em> 속성(attribute)으로 차원벡터가 지정되어 있어야만
1736 :     합니다.이해를 돕기 위해서 아래의 예제를 살펴보도록 합니다. <code>z</code>는 1500개의 구성요소를 갖는 벡터라고 가정합시다.
1737 :     </p>
1738 :     <div class="example">
1739 :     <pre class="example">&gt; dim(z) &lt;- c(3,5,100)
1740 :     </pre></div>
1741 :     <a name="index-dim"></a>
1742 :    
1743 :     <p>다음의 할당문을 실행하면, 이 벡터는 <em>3</em>-차원 구조의, <em>3</em> by <em>5</em> by <em>100</em> 크기의
1744 :     배열로 지정 됩니다. 여기서 첫번째 차원은 <em>3</em>개의 구성요소를 가지므로, <em>1</em>, <em>2</em>, <em>3</em>
1745 :     세 개의 인덱스에 의해 표현되며, 마찬가지로 두번째 차원은 5개의 인덱스를, 마지막으로 세번째 차원은 100개의 인덱스를 갖습니다. 즉,
1746 :     차원벡터의 각 구성요소는 각 차원이 갖는 인덱스의 길이를 의미합니다.
1747 :     </p>
1748 :     <p>이렇게 <code>dim</code>이라는 속성을 이용하는 방법 외에도 <code>matrix()</code>와 <code>array()</code>와 같은 함수를
1749 : gnustats 1243 사용하면 <a href="#array_0028_0029-_00ed_0095_00a8_00ec_0088_0098">array() 함수</a>편의 예제들처럼 좀 더 간단하고 쉽게 배열을 지정할 수 있습니다.
1750 : gnustats 1203 </p>
1751 :     <p>배열을 구성하는 데이터 벡터의 구성요소의 값들은 FORTRAN 프로그램에서처럼 &ldquo;column major order&rdquo; 방법에 의해 나열
1752 :     됩니다. 이 방법은 차원벡터의 첫번째 인덱스부터 순서대로 배열되기 시작해서 마지막 인덱스가 가장 나중에 사용되는 배열되는 방식 입니다.
1753 :     </p>
1754 :     <p>좀 더 구체적인 예를 들면, <code>a</code>라는 배열의 차원벡터가 <code>c(3,4,2)</code>이라고 가정합시다.이 배열
1755 :     <code>a</code>에는 총 3 * 4 * 2 = 24 개의 데이터 엔트리가 포함되어
1756 :     있고, 이 데이터 벡터는 <code>a[1,1,1], a[2,1,1], &hellip;, a[2,4,2], a[3,4,2]</code>의 순서로
1757 :     엔트리들을 배열 안에 나열하고 있습니다.
1758 :     </p>
1759 :     <p>1차원일 배열의 경우 (출력을 포함하여) 거의 벡터와 같은 방식으로 처리됩니다만, 몇 가지 예외가 있어서 사용에 주의가 필요합니다.
1760 :     </p>
1761 :     <hr>
1762 :     <a name="Array-indexing"></a>
1763 : gnustats 1235 <a name="e_00b0_00b0i_0027-i_002ce_002b_002di_002b_002d_0028array-indexing_0029e31_002f4-eu_0021i_002b_002diii-i-ii--iSSi-_0028subsections_0029"></a>
1764 :     <h3 class="section">5.2 배열 인덱싱(array indexing)ê³¼ 구성요소의 선택적 지정(subsections)</h3>
1765 : gnustats 1203 <a name="index-Indexing-of-and-by-arrays"></a>
1766 :    
1767 :     <p>배열의 각 구성요소들은 배열 이름 바로 뒤에 대괄호([])사이에 컴마로 구분된 첨자(subscript)를 사용하여 선택할 수
1768 :     있습니다. 이러한 선택을 좀 더 일반화하면, 한 배열의 첨자를 사용할 위치에 <em>index vectors</em>(인덱스 벡터)의
1769 :     시퀀스를 사용하면 해당 배열의 어떤 부분이라도 선택할 수 있습니다; 하지만 인덱스 벡터의 구성요소가 아무것도 선택되지 않으면 (즉,
1770 :     empty 상태), 해당 첨자가 가질 수 있는 모든 값이 범위로 선택 됩니다.
1771 :     </p>
1772 : gnustats 1222 <p>More generally, subsections of an array may be specified by giving a
1773 :     sequence of <em>index vectors</em> in place of subscripts; however <em>if
1774 :     any index position is given an empty index vector, then the full range of
1775 :     that subscript is taken</em>.
1776 :     </p>
1777 : gnustats 1203 <p>이해를 돕기 위해 앞의 예제의 <code>a</code>라는 벡터를 다시 사용하면, <code>a[2,,]</code>는 <code>c(4,2)</code>의 차원벡터를
1778 : gnustats 1222 갖는 4 * 2 배열이며, 순서대로 다음의 값들을 포함하는 데이터 벡터이기도 합니다.이것은 원래 배열
1779 :     <code>a</code>의 차원이 선택되기 때문입니다. 따라서 차원벡터의 길이에 맞추어 <em>4</em>행 <em>2</em>열을 가진 행렬처럼 출력된 것 입니다.
1780 : gnustats 1203 </p>
1781 :     <div class="example">
1782 :     <pre class="example">c(a[2,1,1], a[2,2,1], a[2,3,1], a[2,4,1],
1783 :     a[2,1,2], a[2,2,2], a[2,3,2], a[2,4,2])
1784 :     </pre></div>
1785 :    
1786 :     <p><code>a[,,]</code>는 배열 <code>a</code> ê·¸ 자체를 의미하는데, 이것은 첨자를 전혀 사용하지 않고 그냥 <code>a</code>만 사용한
1787 :     것과 같습니다.
1788 :     </p>
1789 :     <p>어떤 배열이 주어지면, 예를 들어 <code>Z</code>라는 배열이 있다면, 이 배열의 차원벡터는 함수 <code>dim(Z)</code>를 사용하여 확인
1790 :     가능합니다.
1791 :     </p>
1792 :     <p>또, 만약 배열의 이름 뒤에 <em>a[3]</em> 또는 <em>a[3:10]</em>ê³¼ 같이 <em>오직 한개의 첨자 또는 인덱스
1793 :     벡터</em>가 사용되면, 이 첨자와 인덱스에 해당하는 데이터 엔트리로만 구성된 벡터가 선택 됩니다: 따라서, 이 경우에는 차원벡터가
1794 :     무시됩니다. 하지만, 인덱스가 벡터가 아니라 배열로 지정될 수도 있으며, 여기에 대해서는 다음 부분에서 다루겠습니다.
1795 :     </p>
1796 :    
1797 :     <hr>
1798 : gnustats 1246 <a name="Index-matrices-_0028_00ec_009d_00b8_00eb_008d_00b1_00ec_008a_00a4-_00ed_0096_0089_00eb-_00ac_0029"></a>
1799 :     <a name="Index-matrices-_0028i_002ce_002b_002di_0024_003f-ie-_0021_0029"></a>
1800 :     <h3 class="section">5.3 Index matrices (인덱스 행렬)</h3>
1801 : gnustats 1203
1802 :     <p>배열의 첨자가 오는 위치에 인덱스 벡터 뿐 아니라, 행렬 형태인 <em>index matrix</em>(인덱스 행렬)을 사용할 수 있으며,
1803 :     배열 내 (같은 행이나 열이 아니라)여러 위치에 흩어져 있는 여러 개의 구성 요소들에 하나의 벡터 안에 든 여러 개의 새로운 값들을
1804 :     동시에 입력하거나, 배열 내 여러 위치의 구성요소들을 하나의 벡터로 읽어내기 위해 사용합니다.
1805 :     </p>
1806 :     <p>다음의 행렬을 사용한 예제를 통해 좀 더 자세히 설명하겠습니다. 이중(doubly) 인덱스를 사용하는 배열의 경우, 이 배열의 인덱스
1807 :     행렬을 2개의 열과 필요한 만큼(데이터의 길이)의 행으로 구성됩니다. 이 인덱스 행렬의 엔트리들은 이중 인덱스 된 배열의 행과 열의
1808 :     인덱스에 해당합니다. 예를 들어, 크기가 <em>4</em>행 <em>5</em>열인 배열 <code>X</code>가 있다고 가정하고, <code>X</code>에
1809 :     대해서 다음의 연산을 수행한다고 합시다:
1810 :     </p>
1811 :     <ul>
1812 :     <li> <code>X[1,3]</code>, <code>X[2,2]</code> 그리고 <code>X[3,1]</code>의 위치에 해당하는 구성요소들로만 구성된 벡터를
1813 :     만듭니다.
1814 :     </li><li> 그리고, 이렇게 따로 추출한 <code>X</code>의 엔트리를 모두 <em>0</em>으로 대체 합니다.
1815 :     </li></ul>
1816 :     <p>위의 작업을 수행하기 위해서는 아래 예제와 같이 첨자의 위치에 사용될 <em>3</em> 행 <em>2</em> 열의 첨자 배열이 필요합니다.
1817 :     </p>
1818 :     <div class="example">
1819 :     <pre class="example">&gt; x &lt;- array(1:20, dim=c(4,5)) # <span class="roman">Generate a 4 by 5 array.</span>
1820 :     &gt; x
1821 :     [,1] [,2] [,3] [,4] [,5]
1822 :     [1,] 1 5 9 13 17
1823 :     [2,] 2 6 10 14 18
1824 :     [3,] 3 7 11 15 19
1825 :     [4,] 4 8 12 16 20
1826 :     &gt; i &lt;- array(c(1:3,3:1), dim=c(3,2))
1827 :     &gt; i # <span class="roman"><code>i</code> is a 3 by 2 index array.</span>
1828 :     [,1] [,2]
1829 :     [1,] 1 3
1830 :     [2,] 2 2
1831 :     [3,] 3 1
1832 :     &gt; x[i] # <span class="roman">Extract those elements</span>
1833 :     [1] 9 6 3
1834 :     &gt; x[i] &lt;- 0 # <span class="roman">Replace those elements by zeros.</span>
1835 :     &gt; x
1836 :     [,1] [,2] [,3] [,4] [,5]
1837 :     [1,] 1 5 0 13 17
1838 :     [2,] 2 0 10 14 18
1839 :     [3,] 0 7 11 15 19
1840 :     [4,] 4 8 12 16 20
1841 :     &gt;
1842 :     </pre></div>
1843 :     <p>인덱스 행렬의 구성요소는 음의 값을 가질 수 없으나, <code>NA</code>와 <em>0</em>은 사용할 수 있습니다.만약, 인덱스 행렬에
1844 :     <em>0</em>을 포함한 행이 있다면, 해당 행은 무시될 것입니다. 이와 유사하게, <code>NA</code>를 포함하는 행이 있다면, 해당 행은
1845 :     모두 <code>NA</code>로 출력될 것 입니다.
1846 :     </p>
1847 :    
1848 :     <p>중요한 예제는 아니지만, <code>b</code> 개의 수준을 가진 <code>blocks</code>이라는 요인과 <code>v</code> 개의 수준을 가지고 있는
1849 :     <code>varieties</code> 변수로 정의되는 블록 디자인(block design)에 사용될 (비환원) 디자인 매트릭스(design
1850 :     matrix)를 생성한다고 가정합시다. 더 나아가, 이 실험은 <code>n</code>개의 구획(plot)을 포함한고 가정합시다. 이 실험의
1851 :     디자인 매트릭스는 아래와 같이 생성합니다:
1852 :     </p>
1853 :     <div class="example">
1854 :     <pre class="example">&gt; Xb &lt;- matrix(0, n, b)
1855 :     &gt; Xv &lt;- matrix(0, n, v)
1856 :     &gt; ib &lt;- cbind(1:n, blocks)
1857 :     &gt; iv &lt;- cbind(1:n, varieties)
1858 :     &gt; Xb[ib] &lt;- 1
1859 :     &gt; Xv[iv] &lt;- 1
1860 :     &gt; X &lt;- cbind(Xb, Xv)
1861 :     </pre></div>
1862 :    
1863 :     <p>만약 <code>N</code>이라는 인시던스 행렬(incidence matrix)를 생성하고자 한다면, 아래와 같이 할 수 있습니다.
1864 :     </p>
1865 :     <div class="example">
1866 :     <pre class="example">&gt; N &lt;- crossprod(Xb, Xv)
1867 :     </pre></div>
1868 :     <a name="index-crossprod"></a>
1869 :    
1870 :     <p>그러나, 다음과 같이 <code>table()</code>함수를 이용하면 좀 더 쉽게 위에서 얻은 것과 동일한 행렬을 얻을 수 있습니다.
1871 :     <a name="index-table"></a>
1872 :     </p>
1873 :     <div class="example">
1874 :     <pre class="example">&gt; N &lt;- table(blocks, varieties)
1875 :     </pre></div>
1876 :    
1877 :     <p>인덱스 행렬은 반드시 수치형으로 구성되어야 합니다: 만약, 논리형이나 문자형 같이 다른 형식으로 된 행렬이 입력되면 인덱스 벡터로 간주
1878 :     됩니다.
1879 :     </p>
1880 :     <hr>
1881 : gnustats 1243 <a name="array_0028_0029-_00ed_0095_00a8_00ec_0088_0098"></a>
1882 : gnustats 1235 <a name="array_0028_0029-i_0022i"></a>
1883 :     <h3 class="section">5.4 <code>array()</code> 함수</h3>
1884 : gnustats 1243 <a name="index-array"></a>
1885 : gnustats 1203
1886 :     <p>배열은 벡터에 <code>dim</code>이라는 속성을 부여하여 생성하는 방법 외에도, 아래와 같이 <code>array</code> 함수를 이용하여 생성할
1887 :     수도 있습니다.
1888 :     </p>
1889 :     <div class="example">
1890 :     <pre class="example">&gt; Z &lt;- array(<var>data_vector</var>, <var>dim_vector</var>)
1891 :     </pre></div>
1892 :    
1893 :     <p>예를 들어, 벡터 <code>h</code>가 24개 또는 ê·¸ 보다 적은 수의 숫자로 구성되어 있다면, 아래 명령문은 <em>3</em> 행
1894 :     <em>4</em> 열로 구성된 <em>2</em>개의 3차원 배열을 <code>Z</code>로 지정합니다.
1895 :     </p>
1896 :     <div class="example">
1897 :     <pre class="example">&gt; Z &lt;- array(h, dim=c(3,4,2))
1898 :     </pre></div>
1899 :    
1900 :     <p>특히 <code>h</code>가 정확히 24개의 구성요소를 가지고 있다면, 위 명령문의 실행 결과는 아래 명령문의 실행 결과와 같습니다.
1901 :     </p>
1902 :     <div class="example">
1903 :     <pre class="example">&gt; Z &lt;- h ; dim(Z) &lt;- c(3,4,2)
1904 :     </pre></div>
1905 :    
1906 :     <p>하지만, 벡터 <code>h</code>가 24 개 보다 적은 수의 구성요소를 가지면, <code>array</code> 함수 사용시 24로 지정된 배열의
1907 :     크기를 맞추기위해 벡터 <code>h</code>의 첫번째 원소부터 재사용하게 됩니다.이런 재활용 규칙(recycling rule)에 대해서는
1908 :     see <a href="#The-recycling-rule">The recycling rule</a>를 살펴보시길 바랍니다.그러나, <code>dim(h) &lt;- c(3,4,2)</code>와 같이
1909 :     <code>dim</code> 속성을 변경하고자 할 때는 지정된 길이가 다르기 때문에 에러 메세지가 나타날 것 입니다.아래는 다소 극단적이긴
1910 :     하지만, 흔히 ë³¼ 수 있는 예제 입니다.
1911 :     </p>
1912 :     <div class="example">
1913 :     <pre class="example">&gt; Z &lt;- array(0, c(3,4,2))
1914 :     </pre></div>
1915 :    
1916 :     <p>makes <code>Z</code> an array of all zeros.
1917 :     </p>
1918 :     <p>여기에서 <code>dim(Z)</code>은 차원벡터 <code>c(3,4,2)</code>를 의미하며, <code>Z[1:24]</code>는 벡터 <code>h</code>와
1919 :     동일한 데이터 벡터를 의미 합니다. 또, <code>Z[]</code>와 같이 아무런 첨자를 갖지 않는 경우나 단순히 <code>Z</code>라고 배열
1920 :     이름만 사용하는 것은 <code>Z</code>의 모든 구성요소로 이루어진 배열 ê·¸ 자체를 의미 합니다.
1921 :     </p>
1922 :     <p>배열에 산술연산을 적용하면 기본적으로 배열을 구성하는 데이터 벡터안에 든 원소 단위별로 연산이 이루어집니다.이때 연산에 사용되는 각
1923 :     배열(피연산자, operand)의 <code>dim</code> 속성이 모두 일치해야만, 원래와 동일한 차원벡터를 가진 결과물을 얻을 수
1924 :     있습니다.따라서 만약 <code>A</code>, <code>B</code>, <code>C</code>가 모든 같은 <code>dim</code> 속성을 가진 배열이면, 아래와
1925 :     같이 데이터 벡터의 원소 단위별로 연산을 수행한 결과가 같은 차원벡터를 가진 배열 <code>D</code>로 저장 됩니다.
1926 :     </p>
1927 :     <div class="example">
1928 :     <pre class="example">&gt; D &lt;- 2*A*B + C + 1
1929 :     </pre></div>
1930 :    
1931 :     <p>하지만 배열과 벡터를 함께 사용하는 연산을 정확히 사용하기 위해서는 좀 더 주의해야할 부분이 많습니다.
1932 :     </p>
1933 :    
1934 :     <hr>
1935 :     <a name="The-recycling-rule"></a>
1936 : gnustats 1252 <a name="e2_00a1i_00b0i-e_00b0_00b0i_0027i-i_0022e_00bb-i_0027i_00a9ii_0021-i_00b0i_00b0ie-e_00b0_00a9e2-e_002a_002ce_007c_0021e3-i_0021ii_00a9-e_002ai1"></a>
1937 :     <h4 class="subsection">5.4.1 벡터와 배열을 함께 이용하여 연산하는 방법 그리고 재활용 규칙</h4>
1938 : gnustats 1203 <a name="index-Recycling-rule-1"></a>
1939 :    
1940 :     <p>벡터와 배열을 동시에 사용해서 원소 단위별로 연산을 수행할 때 적용되는 정확한 규칙을 설명하는 것은 꽤 까다롭고 어려운 편
1941 :     입니다. 하지만 지금까지의 경험을 바탕으로 한 다음의 내용은 꽤 쓸만한 길잡이가 될 것 입니다.
1942 :     </p>
1943 :     <ul>
1944 :     <li> 표현식에 사용된 수식은 왼쪽부터 오른쪽으로 입력 됩니다.
1945 :     </li><li> 연산에 사용되는 벡터들의 길이가 서로 다른 경우, 길이가 짧은 벡터의 원소를 재활용하여 길이가 긴 벡터의 길이를 맞추게 됩니다.
1946 :     </li><li> 비교적 길이가 짧은 벡터와 배열들만 연산에 사용될 경우에는, 모든 배열이 같은 <code>dim</code> 속성을 갖지 않으면 에러가 발생합니다.
1947 :     </li><li> 피연산자 벡터의 길이가 다른 피연산자 행렬이나 배열의 길이 보다 긴 경우에도 에러가 발생합니다.
1948 :     </li><li> 연산 중 배열의 구조가 그대로 유지되고, 에러나 벡터로의 강제 전환 같은 일이 일어나지 않는다면, 연산의 결과물은 피연산자 배열들이
1949 :     공통으로 갖는 <code>dim</code> 속성을 그대로 유지하는 배열이 될 것 입니다.
1950 :     </li></ul>
1951 :    
1952 :     <hr>
1953 : gnustats 1252 <a name="g_t_00eb_0091_0090-_00eb_00b0_00b0_00ec_0097_00b4_00ec_009d_0098-_00ec_0099_00b8_00ec-_0081"></a>
1954 :     <a name="e-e_00b0_00b0i_0027i-i_002ci-"></a>
1955 :     <h3 class="section">5.5 두 배열의 외적</h3>
1956 : gnustats 1235 <a name="index-e_00b0_00b0i_0027i-i_002ci-_0028outer-products_0029"></a>
1957 : gnustats 1203
1958 :     <p>배열에 적용되는 연산 중 중요한 것 중 하나는 <code>%o%</code>로 정의된 연산자를 사용하는 <em>외적 (outer
1959 :     product)</em>일 것 입니다. 예를 들어, <code>a</code>와 <code>b</code>이라는 두개의 수치형 배열이 존재할 경우, 이 두 배열에
1960 :     외적(outer product)은 이 두 배열의 차원을 모두 포함한 <code>c(dim(a), dim(b))</code>를 차원 벡터로 갖고,
1961 :     배열 <code>a</code>의 구성요소와 배열 <code>b</code>의 구성요소의 모든 가능한 조합을 곱한 값을 데이터 벡터로 갖는 배열 입니다.
1962 :     <a name="index-_0025o_0025"></a>
1963 :     </p>
1964 :     <div class="example">
1965 :     <pre class="example">&gt; ab &lt;- a %o% b
1966 :     </pre></div>
1967 :    
1968 :     <p>아래와 같은 방법으로도 동일한 도움말 기능을 이용할 수 있습니다.
1969 :     </p>
1970 :     <div class="example">
1971 :     <pre class="example">&gt; ab &lt;- outer(a, b, &quot;*&quot;)
1972 :     </pre></div>
1973 :     <a name="index-outer"></a>
1974 :    
1975 :     <p>이 외적(outer product)에서의 곱하기 연산은 두 개의 변수를 대상으로 수행하는 다른 어떤 함수로도 대체 가능합니다.예를 들어,
1976 :     R에서 두 개의 벡터 <code>x</code>- 와 <code>y</code>- 를 각각의 축으로 정의한 좌표 평면상 존재하는 모든 점들에 대해
1977 : gnustats 1222 f(x; y) = cos(y)/(1 + x^2)과 같은 함수를 적용하는 방법은
1978 :     다음과 같습니다.
1979 : gnustats 1203 </p>
1980 :     <div class="example">
1981 :     <pre class="example">&gt; f &lt;- function(x, y) cos(y)/(1 + x^2)
1982 :     &gt; z &lt;- outer(x, y, f)
1983 :     </pre></div>
1984 :    
1985 :     <p>두 개의 벡터를 사용해서 외적을 할 때 주의할 점은, 결과물이 이중 첨자(doubly subscriped) 배열이라는 점입니다. (이것은
1986 :     행렬이기도 합니다.) 외적 연산에 대해서는 교환법칙이 성립하지 않는다(non-commutative)는 점을 주의하시기 바랍니다. 사용자
1987 : gnustats 1242 정의 R 함수를 만드는 법에 대해서는 <a href="#Writing-your-own-functions-_0028_00ec_0082_00ac_00ec_009a_00a9_00ec_009e_0090-_00ec-_0095_00ec_009d_0098_00ed_0095_00a8_00ec_0088_0098-_00ec_009e_0091_00ec_0084_00b1_00ed_0095_0098_00ea_00b8_00b0_0029">Writing your own functions (사용자 정의함수 작성하기)</a>에서 더
1988 :     다루게 될 것입니다.
1989 : gnustats 1203 </p>
1990 :     <a name="ii-_003a-2i-2i_0027i_002c-ie-_0021i-ie-_0021i-_0028determinant_0029-e3i_00b0ie_002c_00b0"></a>
1991 :     <h4 class="subsubheading">예제: 2행 2열인 행렬의 행렬식 (determinant) 계산하기</h4>
1992 :    
1993 :     <p>다소 작위적이긴 하지만, 이해하기 쉬운 예를 하나 들어봅시다.먼저, <em>[a, b; c, d]</em>의 형태를 갖는 <em>2</em> 행
1994 :     <em>2</em> 열의 행렬을 가정하고, 이 행렬의 각 구성요소는 음수가 아닌 (nonegative) <em>0, 1, &hellip;,
1995 :     9</em> 범위의 한자리의 정수값이라고 합시다.
1996 :     </p>
1997 :     <p>여기서 우리의 과제는 모든 존재 가능한 행렬들에 대해 <em>ad - bc</em>으로 계산되는 행렬식(determinant)을 계산해서,
1998 :     행렬식이 갖는 모든 값의 빈도를 <em>하이 확률 빈도 (high density)</em> 플롯으로 그리는 것입니다. 여기서 만약 각
1999 :     정수들(행렬의 구성요소)의 선택은 균등한 확률(uniformly at random)로 독립적(independently)으로 이루어졌다고
2000 :     가정하면, 이 작업은 행렬식(determinant)의 확률 분포를 찾는 것이 됩니다.
2001 :     </p>
2002 :     <p>이 복잡한 과제를 간단히 수행하는 방법 중 하나는 아래와 같이 <code>outer()</code> 함수를 두번 사용하는 것 입니다:
2003 :     </p>
2004 :     <div class="example">
2005 :     <pre class="example">&gt; d &lt;- outer(0:9, 0:9)
2006 :     &gt; fr &lt;- table(outer(d, d, &quot;-&quot;))
2007 :     &gt; plot(as.numeric(names(fr)), fr, type=&quot;h&quot;,
2008 :     xlab=&quot;Determinant&quot;, ylab=&quot;Frequency&quot;)
2009 :     </pre></div>
2010 :    
2011 :     <p>여기서 행렬식이 갖는 모든 값의 도수분포표인 <code>fr</code>의 <code>names</code> 속성이 행렬식이 갖는 값들의 범위를 나타내기 위해
2012 :     수치형으로 강제형변환 되었다는 점을 주의깊게 살펴보시기 바랍니다. 이러한 수치로의 전환하는 가장 &quot;쉬운&quot; 방법은 아마도
2013 : gnustats 1244 <a href="#Loops-and-conditional-execution-_0028_00eb_00b0_0098_00eb_00b3_00b5-_00eb_00b0_008f-_00ec_00a1_00b0_00ea_00b1_00b4_00eb_00b6_0080-_00ec_008b_00a4_00ed_0096_0089_0029">Loops and conditional execution (반복 및 조건부 실행)</a> 편에서 다루게 될<code>for</code>라는
2014 :     반복문을 이용하는 것인데, 이 방법은 매우 비효율적이라 실용적이지 못합니다.
2015 : gnustats 1203 </p>
2016 :     <p>아마도 전환하게 될 행렬이 20개 중의 하나 꼴로 특이(singular)행렬이라는 점 역시 놀라울 것 같네요.
2017 :     </p>
2018 :     <hr>
2019 : gnustats 1252 <a name="g_t_00eb_00b0_00b0_00ec_0097_00b4_00ec_009d_0098-_00ec-_0084_00ec_00b9_0098_00ec_0097_0090-_00ec_0082_00ac_00ec_009a_00a9_00eb_0090_0098_00eb_008a_0094-_00ec_009d_00bc_00eb_00b0_0098_00ed_0099_0094_00eb_0090_009c-_00eb_00b0_00a9_00eb_00b2_0095"></a>
2020 :     <a name="e_00b0_00b0i_0027i-i-i1i-i_0021i_00a9ee-i1_002f4e_00b0ie-e_00b0_00a9e2"></a>
2021 :     <h3 class="section">5.6 배열의 전치에 사용되는 일반화된 방법</h3>
2022 :     <a name="index-e_00b0_00b0i_0027i-i-i1i-i_0021i_00a9ee-i1_002f4e_00b0ie-e_00b0_00a9e2"></a>
2023 : gnustats 1203
2024 : gnustats 1222 <p>함수 <code>aperm(a, perm)</code>
2025 : gnustats 1203 <a name="index-aperm"></a>
2026 : gnustats 1222 배열 <code>a</code>를 차원 별로 순서를 재배치하는 (permutating)하는 함수 입니다. <code>perm</code> 입력
2027 :     인자(argument,함수의 parameter와 거의 비슷한 의미)는 반드시 <em>{1, &hellip;, k}</em> 범위 내의
2028 :     정수들의 조합이어야 합니다. 여기서 <em>k</em>는 배열 <code>a</code>이 갖는 첨자들의 개수입니다. 따라서, 이 함수를 실행한 결과는
2029 :     배열 <code>a</code>와 같은 크기를 갖지만, 원래의 배열 <code>a</code>의 차원을 사용해서 지정한 <code>perm[j]</code>의 순서대로
2030 :     <code>j</code>의 차원을 갖는 새로운 재배치된 배열입니다.이 함수가 수행하는 연산이 어떤 것인지를 좀 더 쉽게 이해하기 위해 행렬의
2031 :     전치(transpose)가 좀 더 일반화된 것이라고 생각하시면 도움이 될 것입니다. 즉, <code>A</code>라는 행렬(행렬은 ê²°êµ­ 이중
2032 :     첨자로 된 (doubly subscripted) 배열이도 합니다.)이 주어지면, 아래의 연산을 수행한 결과인 <code>B</code>는
2033 :     <code>A</code>를 전치한 행렬입니다.
2034 : gnustats 1203 </p>
2035 :     <div class="example">
2036 :     <pre class="example">&gt; B &lt;- aperm(A, c(2,1))
2037 :     </pre></div>
2038 :    
2039 :     <p>이 경우의 연산은 좀 더 간단한 함수인 <code>t()</code>를 사용한 것과 같습니다.
2040 :     <a name="index-t"></a>
2041 :     따라서, <code>B &lt;- t(A)</code>를 사용하면 동일한 결과를 얻을 수 있습니다.
2042 :     </p>
2043 :     <hr>
2044 : gnustats 1252 <a name="g_t_00ed_0096_0089_00eb-_00ac_00ec_009d_0098-_00ea_00b8_00b0_00eb_008a_00a5_00eb_0093_00a4"></a>
2045 :     <a name="ie-_0021i-e_002c_00b0eY_003de_0024_003f"></a>
2046 :     <h3 class="section">5.7 행렬의 기능들</h3>
2047 : gnustats 1203
2048 :    
2049 :    
2050 :     <p>위에서 살짝 언급했듯이, 행렬은 이중 첨자를 사용하는 배열입니다. 하지만, 행렬이라는 것은 배열 섹션과 분리해서 따로 설명해야할만큼
2051 :     중요한 개념입니다. R은 행렬에 특화된 다양한 연산기능과 함수들을 제공합니다.몇가지 예를들면, 위에서 설명했던
2052 :     <code>t(X)</code>는 행렬을 전치하는데 사용되는 함수이며, <code>nrow(A)</code>와 <code>ncol(A)</code>은 각각 행렬
2053 :     <code>A</code>의 행과 열의 개수를 알려주는 함수입니다.
2054 :     <a name="index-nrow"></a>
2055 :     <a name="index-ncol"></a>
2056 :     </p>
2057 :    
2058 :     <hr>
2059 :     <a name="Multiplication"></a>
2060 : gnustats 1252 <a name="ie-_0021i-e3_002b_002di-"></a>
2061 :     <h4 class="subsection">5.7.1 행렬의 곱셈</h4>
2062 : gnustats 1203
2063 : gnustats 1252 <a name="index-ie-_0021i-e3_002b_002di-"></a>
2064 : gnustats 1203 <p>The operator <code>%*%</code> is used for matrix multiplication.
2065 :     <a name="index-_0025_002a_0025"></a>
2066 :     보통은 <em>n</em>행 <em>1</em>열의 행렬이나 <em>1</em>행 <em>n</em>열의 행렬은 상황에 따라 적절히
2067 :     <em>n</em>-벡터로 사용될 수 있습니다. 하지만, 행렬의 곱셈식에서 사용되는 벡터는 곱셈을 수행하기 적합한 조건을 갖추기위해 (행렬의
2068 :     곱셈을 수행하기 위해서는 앞 행렬의 행의 길이가 뒷행령의 열의 길이가 같아야 합니다.) 행벡터나 열백터로 자동적으로
2069 :     변환됩니다. (그러나, 나중에 보게 되겠지만, 이러한 행이나 열 벡터로의 변환이 항상 가능한 것은 아닙니다.)
2070 :     </p>
2071 :     <p>만약, <code>A</code>와 <code>B</code> 모두 정방(square)행렬이라면, 다음의 식을 사용해서 원소단위별 곱셈을 수행할 수 있습니다.
2072 :     </p>
2073 :     <div class="example">
2074 :     <pre class="example">&gt; A * B
2075 :     </pre></div>
2076 :    
2077 :     <p>하지만, 아래의 표현은 원소단위별 곱셈이 아닌 행렬의 곱셈이라는 것을 구분하셔야 합니다.
2078 :     </p>
2079 :     <div class="example">
2080 :     <pre class="example">&gt; A %*% B
2081 :     </pre></div>
2082 :    
2083 :     <p>만약, <code>x</code>가 벡터라면 아래의 표현은 이차식(quadratic form)을 나타냅니다.
2084 :     </p>
2085 :     <div class="example">
2086 :     <pre class="example">&gt; x %*% A %*% x
2087 :     </pre></div>
2088 :    
2089 : gnustats 1220 <p><a name="DOCF14" href="#FOOT14"><sup>14</sup></a>
2090 : gnustats 1203 </p>
2091 :     <a name="index-crossprod-1"></a>
2092 :     <p>함수 <code>crossprod()</code>는 &ldquo;외적, 크로스프로덕트 (crossproduct)&rdquo;라고하며, 연산을 위해
2093 :     <code>corssprod(X, y)</code>의 형태로 입력하면, 좀 더 효율적인 방법으로 <code>t(X) %*% y</code>와 같은 연산을
2094 :     수행합니다.만약 함수 <code>crossprod()</code>에 두번째가 인자가 생략되어 있다면, 첫번째 인자를 두 번 사용하여 연산을 수행하게
2095 :     됩니다.
2096 :     </p>
2097 :     <a name="index-diag"></a>
2098 :     <p>함수 <code>diag()</code>는 입력받는 인자에 따라 다른 결과를 출력합니다. 만약 <code>diag(v)</code>와 같이 <code>v</code>라는
2099 :     벡터 인자가 입력되면, 벡터 <code>v</code>의 각 구성요소를 대각원소로 갖는 대각행렬을 생성합니다.반면에 <code>diag(M)</code>ê³¼
2100 :     같이 <code>M</code>라는 행렬 인자가 입력되면, 행렬 <code>M</code>이 가지는 대각원소들을 벡터의 형식으로 출력하게 됩니다.이것은
2101 :     <small>MATLAB</small>에서 사용하는 함수 <code>diag()</code>ê³¼ 비슷하게 작동한다고 보시면 됩니다.다소 혼란스러울 수도 있겠지만,
2102 :     <code>diag(k)</code>와 같이 <code>k</code>라는 스칼라 인자가 입력되면, <code>k</code>행 <code>k</code>열을 가지는
2103 :     단위행렬(identity matrix)이 생성된다는 점도 기억하시기 바랍니다.
2104 :     </p>
2105 :     <hr>
2106 : gnustats 1252 <a name="g_t_00ec_0084-_00ed_0098_0095_00eb_00b0_00a9_00ec-_0095_00ec_008b_009d_00ea_00b3_00bc-_00ec_0097_00ad_00ed_0096_0089_00eb-_00ac"></a>
2107 :     <a name="i-ie_00b0_00a9i-ie31_002f4-iie-_0021"></a>
2108 :     <h4 class="subsection">5.7.2 선형방정식과 역행렬</h4>
2109 : gnustats 1203
2110 :     <a name="index-Linear-equations"></a>
2111 :     <a name="index-solve"></a>
2112 :     <p>선형방정식을 푼다는 것의 의미는 역행렬을 곱하는 것과 같습니다. 아래의 표현식이 주어지고, 행렬 <code>A</code>와 벡터 <code>b</code>만
2113 :     알고 있는 경우, 벡터 <code>x</code>가 선형방정식의 해가 됩니다.
2114 :     </p>
2115 :     <div class="example">
2116 :     <pre class="example">&gt; b &lt;- A %*% x
2117 :     </pre></div>
2118 :    
2119 :     <p>R에서는 아래와 같은 방법으로 선형방정식을 풀어서, <code>x</code>를 해로 구합니다. (약간의 정확도의 차이가 발생하는 경우도
2120 :     있습니다.)
2121 :     </p>
2122 :     <div class="example">
2123 :     <pre class="example">&gt; solve(A,b)
2124 :     </pre></div>
2125 :    
2126 : gnustats 1222 <p>선형방정식을 좀 더 수학적으로 표현하면 <code>x
2127 :     = A^{-1} %*% b</code> 입니다. 여기에서 <code>A^{-1}</code>은 행렬
2128 :     <code>A</code>의 역행렬이며, 아래의 함수로 계산할 수 있습니다.
2129 : gnustats 1203 </p>
2130 :     <div class="example">
2131 :     <pre class="example">solve(A)
2132 :     </pre></div>
2133 :    
2134 :     <p>하지만, 위와 같이 역행렬을 이용하여 <code>x &lt;- solve(A) %*% b</code>를 계산하는 것은 함수
2135 :     <code>solve(A,b)</code>를 사용하는 것보다 비효율적인데다 에러 발성이 가능성도 많아 실제로 많이 사용하지는 않습니다.
2136 :     </p>
2137 : gnustats 1222 <p>다변량의 연산에 사용되는 이차행렬식(quadratic form) &nbsp;<code>x
2138 :     %*% A^{-1} %*% x</code> &nbsp;은 <code>A</code>의 역행렬을 이용하는 것 보단 <code>x %*% solve(A,x)</code>으로
2139 : gnustats 1220 계산하는 편이 낫습니다. <a name="DOCF15" href="#FOOT15"><sup>15</sup></a>
2140 : gnustats 1203 </p>
2141 :     <hr>
2142 : gnustats 1252 <a name="g_t_00ea_00b3-_00ec_009c-_00ea_00b0_0092_00ea_00b3_00bc-_00ea_00b3-_00ec_009c-_00eb_00b2_00a1_00ed_0084_00b0"></a>
2143 :     <a name="e3-i-e_00b0e31_002f4-e3-i-e2_00a1i_00b0"></a>
2144 :     <h4 class="subsection">5.7.3 고유값과 고유벡터</h4>
2145 :     <a name="index-e3-i-e_00b0e31_002f4-e3-i-e2_00a1i_00b0"></a>
2146 : gnustats 1203
2147 :     <a name="index-eigen"></a>
2148 :     <p>함수 <code>eigen(Sm)</code>는 대칭행렬 (symmetric matrix) <code>Sm</code> 의 고유값(eigenvalues)ê³¼
2149 :     고유벡터 (eigenvectors)를 계산해주며 아래처럼 사용합니다.
2150 :     </p>
2151 :     <div class="example">
2152 :     <pre class="example">&gt; ev &lt;- eigen(Sm)
2153 :     </pre></div>
2154 :    
2155 :     <p>위 식을 실행한 결과로 <code>ev$val</code>라는 <code>Sm</code>의 고유값 벡터와 여기에 대응되는 <code>ev$vec</code>라는
2156 :     고유벡터의 행렬을 구성요소로 갖는 리스트를 객체 ev에 저장합니다. 만약 단순히 고유값만 필요하다면 아래와 같이 하시면 됩니다:
2157 :     </p>
2158 :     <div class="example">
2159 :     <pre class="example">&gt; evals &lt;- eigen(Sm)$values
2160 :     </pre></div>
2161 :    
2162 :     <p><code>evals</code>이라는 객체는 고유값의 벡터만 포함하고 있을 뿐, 고유벡터는 저장되지 않았습니다.
2163 :     </p>
2164 :     <div class="example">
2165 :     <pre class="example">&gt; eigen(Sm)
2166 :     </pre></div>
2167 :    
2168 :     <p>행렬의 크기가 큰 경우에는, 다음과 같이 식을 사용함으로써 고유벡터의 계산을 생략하는 편이 나을 수 있습니다.
2169 :     </p>
2170 :     <div class="example">
2171 :     <pre class="example">&gt; evals &lt;- eigen(Sm, only.values = TRUE)$values
2172 :     </pre></div>
2173 :    
2174 :    
2175 :     <hr>
2176 : gnustats 1252 <a name="g_t_00ed_008a_00b9_00ec_009d_00b4_00ea_00b0_0092-_00eb_00b6_0084_00ed_0095_00b4-_00eb_00b0_008f-_00ed_0096_0089_00eb-_00ac_00ec_008b_009d"></a>
2177 :     <a name="i1i_0027e_00b0-ePi_0027-e_00b0-ie-_0021i"></a>
2178 :     <h4 class="subsection">5.7.4 특이값 분해 및 행렬식</h4>
2179 : gnustats 1203 <a name="index-Singular-value-decomposition"></a>
2180 :    
2181 :     <a name="index-svd"></a>
2182 :     <p>함수 <code>svd(M)</code>는 <code>M</code>이라는 임의의 행렬을 인자로 가지며 이 행렬에 대한 특이값 분해(the singular
2183 :     value decomposition)를 수행합니다.이 연산의 결과는 세가지 부분으로 구성됩니다; 첫째는 <code>M</code>행렬의
2184 :     열공간(column space)ê³¼ 동일한 공간을 생성(span)하는 정규직교(orthonormal)열 벡터들로 구성된 행렬
2185 :     <code>U</code>이고; 둘째는 이 행렬의 열공간(column space)이 <code>M</code> 행렬의 행공간(row space)ê³¼ 동일한
2186 :     공간을 생성(span)하는 정규직교(orthonormal)열 벡터들로 구성된 행렬 <code>V</code>; 셋째는 <code>M = U %*%
2187 :     D %*% t(V)</code>라는 조건을 만족하는 양의 숫자들로 구성된 대각행렬 <code>D</code>입니다. <code>svd(M)</code>의 실행결과는 위의
2188 :     세가지를 구성요소로 갖는 하나의 리스트이며, 각 구성요소들은 정의된대로 <code>d</code>, <code>u</code>, <code>v</code>라는 이름을
2189 :     가집니다.
2190 :     </p>
2191 :     <p>만약 행렬 <code>M</code>이 정방(square)행렬이라면, 아래처럼 표현식을 사용하여 행렬 <code>M</code>의
2192 :     행렬식(determinant)의 절대값을 계산할 수 있습니다.
2193 :     </p>
2194 :     <div class="example">
2195 :     <pre class="example">&gt; absdetM &lt;- prod(svd(M)$d)
2196 :     </pre></div>
2197 :    
2198 :     <p>또한, 여러 행렬에 같은 계산을 반복적으로 사용하고 싶다면 아래와 같이 사용자 정의함수 <code>abdet()</code>를 작성하는 것도 가능할
2199 :     것입니다. 이렇게 <code>absdet()</code> 함수를 정의해두면, 다른 R 함수처럼 필요할 때마다 사용할 수 있습니다.
2200 :     </p>
2201 :     <div class="example">
2202 :     <pre class="example">&gt; absdet &lt;- function(M) prod(svd(M)$d)
2203 :     </pre></div>
2204 :    
2205 :     <a name="index-Determinants"></a>
2206 :     <p>약간은 단순하지만 유용하게 사용할 수 있는 또 다른 예로, 정방(square) 행렬의 트레이스(trace)를 계산해주는
2207 :     <code>tr()</code> 함수를 작성하는 것도 생각해 ë³¼ 수 있습니다.[힌트:이 함수를 작성할 때 loop 문장을 사용할 필요가
2208 :     없습니다. <code>diag()</code> 함수를 다시 찾아 보세요.]
2209 :     </p>
2210 :     <a name="index-det"></a>
2211 :     <a name="index-determinant"></a>
2212 :     <p>R은 행렬식(determinant)ê³¼ ê·¸ 부호(sign)을 구하는데 사용하는 <code>det</code>를 빌트인(builtin)함수로
2213 :     제공합니다. 또다른 함수 <code>determinant</code>는 행렬식의 부호 뿐 아니라 모듈러스(modulus)(그리고 옵션으로 선택시
2214 :     log 스케일에서의 모듈러스까지)의 결과도 함께 출력합니다. 이러한 함수들에 대해서는 나중에 좀 더 자세히 다루겠습니다.
2215 :     </p>
2216 :    
2217 :     <hr>
2218 : gnustats 1252 <a name="g_t_00ec_00b5_009c_00ec_0086_008c_00ec-_009c_00ea_00b3_00b1_00eb_00b2_0095_00ea_00b3_00bc-QR-_00eb_00b6_0084_00ed_0095_00b4_00eb_00b2_0095"></a>
2219 :     <a name="iuii-e3_002b_002de2e31_002f4-QR-ePi_0027e2"></a>
2220 :     <h4 class="subsection">5.7.5 최소제곱법과 QR 분해법</h4>
2221 : gnustats 1203 <a name="index-Least-squares-fitting"></a>
2222 :     <a name="index-QR-decomposition"></a>
2223 :    
2224 :     <p>함수 <code>lsfit()</code>은 최소제곱법 적합(least squares fitting)을 수행하여 얻은 결과들을 리스트 형태로
2225 :     돌려줍니다.
2226 :     </p>
2227 :     <div class="example">
2228 :     <pre class="example">&gt; ans &lt;- lsfit(X, y)
2229 :     </pre></div>
2230 :     <a name="index-lsfit"></a>
2231 :    
2232 :     <p>만약, <code>y</code>가 관측값 벡터이고, <code>X</code>는 디자인 행렬이라고 할때, 아래와 같이 사용된 함수
2233 :     <code>lsfit()</code>는 최소 제곱법 (least square)을 이용하여 적합한 값을 <code>ans</code>에 할당합니다.더 자세한
2234 :     사항은 도움말을 참조하시길 바랍니다. 특히, 최소제곱법을 이용한 회귀분석에 대한 모형진단이 필요하시면 함수
2235 :     <code>ls.diag()</code>를 찾아보시길 바랍니다. 특히, 이 함수를 사용해서 회귀모형을 적합하면, 원래 <code>X</code>의 열에
2236 :     포함되지 않는 전체 평균이 하나의 항으로 포함된다는 점을 주의하시기 바랍니다. 더욱이 회귀분석을 수행할 때는 거의 대부분의 경우
2237 :     <code>lsfit()</code> 보다는 <code>lm(.)</code>를 사용하는 것이 더욱 편리하다는 점도 알아두시면 좋을 것입니다.
2238 :     </p>
2239 :     <a name="index-qr"></a>
2240 :     <p>최소제곱법과 연관되어 있는 함수로는 <code>qr()</code>ê³¼ 그에 연관된 함수족(allies)이 있습니다. 아래의 예제를 살펴보세요.
2241 :     </p>
2242 :     <div class="example">
2243 :     <pre class="example">&gt; Xplus &lt;- qr(X)
2244 :     &gt; b &lt;- qr.coef(Xplus, y)
2245 :     &gt; fit &lt;- qr.fitted(Xplus, y)
2246 :     &gt; res &lt;- qr.resid(Xplus, y)
2247 :     </pre></div>
2248 :    
2249 :     <p>위 문장들은 벡터 <code>y</code>를 <code>X</code> 공간 위에 직사영(orthogonal projection)시킨 값(즉, fitted
2250 :     된 값)을 <code>fit</code>에, 그리고 ê·¸ 직교여공간에 사영(the projection onto the orthogonal
2251 :     complement)시킨 값 (즉, 잔차)를 <code>res</code>에, 그리고 사영을 통해 얻은 회귀계수(coefficient)의 벡터는
2252 :     <code>b</code>에 저장합니다. 특히, <code>b</code>의 값은 <small>MATLAB</small>에서 &lsquo;백슬래쉬&rsquo; 연산자를 이용해서 얻은 것과
2253 :     동일합니다.
2254 :     </p>
2255 :     <p>위의 연산을 위한 <code>X</code>가 이 full column rank라는 조건을 만족해야 하는 것은 아닙니다.이 조건이 만족되지 않는
2256 :     경우, 선형독립이 아닌 열들을 찾아서 이들을 제거하면 됩니다.
2257 :     </p>
2258 :     <p>이런식으로 회귀계수를 계산하는 것은 앞에서 소개된 함수들을 이용하는 것 보다 훨씬 오래되고, 덜 자동화된 (low-level) 방법으로
2259 :     최소제곱 적합법을 이용하는 방법입니다. 이런 식의 계산이 필요한 경우가 아직 가끔 있긴하지만, 거의 대부분의 경우 앞으로
2260 : gnustats 1245 <a href="#Statistical-models-in-R-_0028R_00ec_0097_0090_00ec_0084_009c-_00ec_0082_00ac_00ec_009a_00a9_00eb_0090_0098_00eb_008a_0094-_00ed_0086_00b5_00ea_00b3_0084_00eb_00aa_00a8_00ed_0098_0095_00eb_0093_00a4_0029">Statistical models in R (R에서 사용되는 통계모형들)</a>에서 좀 더 설명하게 될 통계 모형 함수들을 사용하는
2261 :     것으로 대체되고 있습니다.
2262 : gnustats 1203 </p>
2263 :    
2264 :     <hr>
2265 :     <a name="Forming-partitioned-matrices"></a>
2266 : gnustats 1252 <a name="cbind_0028_0029i-rbind_0028_0029eY_003d1_002f4-i_0027i_00a9ii_0021-ePi-e-ie-_0021i-i_00a1_00b0i_00a9ie_002c_00b0"></a>
2267 :     <h3 class="section">5.8 <code>cbind()</code>와 <code>rbind()</code>를 이용하여 분할된 행렬을 조합하기</h3>
2268 : gnustats 1203 <a name="index-cbind"></a>
2269 :     <a name="index-rbind"></a>
2270 :    
2271 :     <p>위에서도 잠깐 언급했었지만, <code>cbind()</code>와 <code>rbind()</code>라는 함수는 벡터와 행렬을 묶어 새로운 행렬을 생성할
2272 :     때 사용됩니다. 간단히 말해, <code>cbind()</code> 함수는 여러 행렬들을 세로로, 혹은 열방향으로 묶어서, 그리고
2273 :     <code>rbind()</code> 함수는 가로로, 혹은 행방향으로 묶어서 새로운 행렬을 생성합니다.
2274 :     </p>
2275 :     <p>아래 함수 <code>cbind()</code>에 사용될 입력인자는 임의의 길이를 가진 벡터이거나 같은 길이의 열,또는 같은 수의 행을 가진
2276 :     행렬이어만 합니다. 이 함수를 적용하면 입력된 <var>arg_1</var>, <var>arg_2</var>, &hellip;이 각각의 열로 하는 하나의
2277 :     행렬이 생성됩니다.
2278 :     </p>
2279 :     <div class="example">
2280 :     <pre class="example">&gt; X &lt;- cbind(<var>arg_1</var>, <var>arg_2</var>, <var>arg_3</var>, &hellip;)
2281 :     </pre></div>
2282 :    
2283 :     <p><code>cbind()</code>의 입력인자가 함께 입력된 다른 행렬의 열 길이 보다 짧은 길이를 가진 벡터인 경우가 있을 수 있습니다.이
2284 :     경우, 길이가 더 짧은 벡터들은 행렬의 열의 길이(만약 행렬이 입력되지 않은 경우에는 가장 길이가 긴 벡터)에 맞추기 위해 ê·¸ 구성요소를
2285 :     반복 사용합니다.
2286 :     </p>
2287 :     <p>함수 <code>rbind()</code>는 함수 <code>cbind()</code>와 유사한 기능을 행에 대해 수행힙니다.
2288 :     </p>
2289 :     <p>이 함수의 경우, 입력된 벡터가 무엇이든 간에, 길이가 다를 경우 위와 같이 반복 사용되서 길이를 맞추는 것은 물론이고, 모든 인자를
2290 :     행벡터로서 처리합니다.
2291 :     </p>
2292 :     <p><code>X1</code>ê³¼ <code>X2</code>라는 두 행렬이 같은 개수의 행을 가지고 있다고 가정합니다. <code>1</code>로 구성된 열과 함께 위
2293 :     둘을 열 방향으로 결합하여 새 행렬 <code>X</code>를 생성하기 위해, 아래와 같은 명령문을 사용할 수 있습니다.
2294 :     </p>
2295 :     <div class="example">
2296 :     <pre class="example">&gt; X &lt;- cbind(1, X1, X2)
2297 :     </pre></div>
2298 :    
2299 :     <p><code>rbind()</code>이나 <code>cbind()</code>를 사용하면 얻어지는 결과는 항상 행렬입니다. 따라서,
2300 :     <code>cbind(x)</code>와 <code>rbind(x)</code>는 벡터 <code>x</code>를 각각 하나의 열 혹은 하나의 행으로 구성된 행렬로
2301 :     바꾸는 가장 단순한 방법일 것입니다.
2302 :     </p>
2303 :     <hr>
2304 : gnustats 1252 <a name="g_t_00eb_00b0_00b0_00ec_0097_00b4_00ec_0097_0090-_00ec_0082_00ac_00ec_009a_00a9_00eb_0090_0098_00eb_008a_0094-_00ea_00b2_00b0_00ed_0095_00a9_00ed_0095_00a8_00ec_0088_0098-c_0028_0029"></a>
2305 : gnustats 1235 <a name="e_00b0_00b0i_0027ii-i_0021i_00a9ie-e2_00b0i_00a9_0028concatenation_0029-i_0022i-c_0028_0029"></a>
2306 :     <h3 class="section">5.9 배열에서 사용하는 결합(concatenation) 함수 <code>c()</code></h3>
2307 : gnustats 1203
2308 :     <p><code>cbind()</code>와 <code>rbind()</code> 함수의 경우 행렬이 가진 <code>dim</code> 속성에 기반해서 여러개의 행렬을
2309 :     하나로 연결하는 반면, 함수 <code>c()</code>는 <code>dim</code>ê³¼ <code>dimnames</code> 속성 모두를 무시한 채 결합시킨다고
2310 :     할 수 있습니다. 따라서, 경우에 따라서는 <code>c()</code>를 이용해야만 할 수 있습니다.
2311 :     </p>
2312 :     <p>이런식으로 배열의 속성을 무시하고 단순 벡터로 강제형변환하는 공식적으로 알려진 방법은 다음과 같이 <code>as.vector()</code>
2313 :     함수를 이용하는 것입니다.
2314 :     </p>
2315 :     <div class="example">
2316 :     <pre class="example">&gt; vec &lt;- as.vector(X)
2317 :     </pre></div>
2318 :     <a name="index-as_002evector"></a>
2319 :    
2320 :     <p>하지만, 이와 비슷한 결과를 함수 <code>c()</code>의 이러한 부가적 성질을 활용함으로써 얻을 수도 있습니다.
2321 :     </p>
2322 :     <div class="example">
2323 :     <pre class="example">&gt; vec &lt;- c(X)
2324 :     </pre></div>
2325 :     <a name="index-c-2"></a>
2326 :    
2327 :     <p>실제로는 다소 차이점이 있기는 하지만, 둘 중 어떤 함수를 이용하여 이 작업을 수행할 것인가는 단순히 프로그래밍 스타일의 차이일
2328 :     뿐입니다.
2329 :     </p>
2330 :     <hr>
2331 : gnustats 1252 <a name="g_t_00ec_009a_0094_00ec_009d_00b8_00ec_009d_0084-_00ec_009d_00b4_00ec_009a_00a9_00ed_0095_0098_00ec_0097_00ac-_00eb_008f_0084_00ec_0088_0098_00eb_00b6_0084_00ed_008f_00ac_00ed_0091_009c-_00ec_0083_009d_00ec_0084_00b1_00ed_0095_0098_00ea_00b8_00b0"></a>
2332 :     <a name="ii_002ci-i_0027i_00a9ii_0021-eiePi_0021i-ii_002b_002die_002c_00b0"></a>
2333 :     <h3 class="section">5.10 요인을 이용하여 도수분포표 생성하기</h3>
2334 : gnustats 1203 <a name="index-Tabulation"></a>
2335 :    
2336 :     <p>우리는 앞부분에서 데이터를 그룹화하는데 요인 (factor)을 사용할 수 있음을 배웠습니다. 마찬가지로 만약 2개의 요인을 사용하면
2337 :     2차원 분류(two way cross classification)를 정의할 수 있을 것이고, 더 나아가 k 개의 요인으로 k-차원의
2338 :     분류가 가능할 것입니다.
2339 :     <a name="index-table-1"></a>
2340 :     함수 <code>table()</code>은 같은 길이를 가진 요인들을 분류해서 빈도분포표를 생성합니다. 즉, <em>k</em>개의 요인이 입력될
2341 :     경우, 이 함수를 사용한 결과로 <em>k</em> 차원의 빈도의 배열이 생성됩니다.
2342 :     </p>
2343 :     <p>예를 들어, 입력된 각 데이터가 지역(state)코드인 데이터 벡터인 <code>statef</code>라는 하나의 요인이 존재한다고
2344 :     가정합시다. 아래의 명령문은 <code>statefr</code>라는 이름으로 샘플의 각 주별 빈도를 요약하는 표를 저장합니다.
2345 :     </p>
2346 :     <div class="example">
2347 :     <pre class="example">&gt; statefr &lt;- table(statef)
2348 :     </pre></div>
2349 :    
2350 :     <p>이 표에 각 주 별 도수는 수준 (level)의 알파벳 이름순으로 정렬됩니다. 이와 같은 작업을 수행하는 좀 더 간단한 방법은 다음과
2351 :     같습니다.
2352 :     </p>
2353 :     <div class="example">
2354 :     <pre class="example">&gt; statefr &lt;- tapply(statef, statef, length)
2355 :     </pre></div>
2356 :    
2357 :     <p>이번에는 입련된 각 데이터가 소득수준 (&ldquo;income class&rdquo;)을 의미하는 <code>incomef</code>라는 요인을 가정
2358 :     합시다. 이 소득수준의 경우, 함수 <code>cut()</code>를 사용해서 다음과 같이 생성할 수 있습니다.
2359 :     </p>
2360 :     <div class="example">
2361 :     <pre class="example">&gt; factor(cut(incomes, breaks = 35+10*(0:7))) -&gt; incomef
2362 :     </pre></div>
2363 :     <a name="index-cut"></a>
2364 :    
2365 :     <p>위에서 정의한 두 개의 요인에 대해 2차원 빈도표를 생성하면 다음과 같습니다:
2366 :     </p>
2367 :     <div class="example">
2368 :     <pre class="example">&gt; table(incomef,statef)
2369 :     statef
2370 :     incomef act nsw nt qld sa tas vic wa
2371 :     (35,45] 1 1 0 1 0 0 1 0
2372 :     (45,55] 1 1 1 1 2 0 1 3
2373 :     (55,65] 0 3 1 3 2 2 2 1
2374 :     (65,75] 0 1 0 0 0 0 1 0
2375 :     </pre></div>
2376 :    
2377 :     <p>좀 더 많은 차원을 대상으로 빈도표를 작성하는 것도 이것과 크게 다르지 않습니다.
2378 :     </p>
2379 :     <hr>
2380 : gnustats 1252 <a name="g_t_00eb_00a6_00ac_00ec_008a_00a4_00ed_008a_00b8_00ec_0099_0080-_00eb_008d_00b0_00ec_009d_00b4_00ed_0084_00b0-_00ed_0094_0084_00eb-_0088_00ec_009e_0084"></a>
2381 :     <a name="e_007c_0021i_0024_003fi_002ci-e_00b0i_0027i_00b0-ie-i"></a>
2382 :     <h2 class="chapter">6 리스트와 데이터 프레임</h2>
2383 : gnustats 1203
2384 :    
2385 :     <hr>
2386 : gnustats 1235 <a name="Lists-_0028_00eb_00a6_00ac_00ec_008a_00a4_00ed_008a_00b8_0029"></a>
2387 :     <a name="Lists-_0028e_007c_0021i_0024_003fi_002c_0029"></a>
2388 :     <h3 class="section">6.1 Lists (리스트)</h3>
2389 :     <a name="index-Lists-_0028e_007c_0021i_0024_003fi_002c_0029"></a>
2390 : gnustats 1203
2391 :     <p>R에서 <em>리스트(list)</em>라는 것은 <em>컴포넌트 (components)</em>라고 불리는 일정한 순서로 정렬된 여러
2392 :     객체들의 집합입니다.
2393 :     </p>
2394 :     <p>각각의 컴포넌트는 반드시 같은 모드(mode)나 형태(type)일 필요는 없습니다. 예를 들어, 하나의 리스트는 수치형 벡터, 논리형
2395 :     벡터, 행렬, 복소수 벡터, 문자형 벡터, 함수 이외의 어떤 형태라도 컴포넌트로 포함할 수 있습니다. 리스트를 생성하는 아래의 간단한
2396 :     예를 살펴보시기 바랍니다:
2397 :     </p>
2398 :     <div class="example">
2399 :     <pre class="example">&gt; Lst &lt;- list(name=&quot;Fred&quot;, wife=&quot;Mary&quot;, no.children=3,
2400 :     child.ages=c(4,7,9))
2401 :     </pre></div>
2402 :     <a name="index-list"></a>
2403 :    
2404 :     <p>리스트에 포함된 컴포넌트들은 항상 <em>숫자로 구분(numbered)</em>되어 있으며, 따라서 각각의 컴포넌트를 이에 해당하는 숫자
2405 :     (즉, 컴포넌트 인덱스)로 불러내는 것이 가능합니다. 따라서, <code>Lst</code>가 4개의 컴포넌트를 갖는 리스트라면, 각각의 컴포넌트는
2406 :     각각 <code>Lst[[1]]</code>,<code>Lst[[2]]</code>, <code>Lst[[3]]</code> 그리고 <code>Lst[[4]]</code>로 불러낼
2407 :     수 있습니다. 특히, <code>Lst[[4]]</code>가 첨자로 표현되는 구성요소를 가진 벡터인 경우, <code>Lst[[4]][1]</code>는 이
2408 :     컴포넌트의 첫번째 구성요소를 의미합니다.
2409 :     </p>
2410 :     <p>또 <code>Lst</code>가 리스트인 경우, <code>length()</code> 함수를 사용하면 (top level) 컴포넌트의 개수를 알 수
2411 :     있습니다. 위의 예제를 계속 사용하면, <code>length(Lst)</code>는 4라는 값을 출력할 것입니다.
2412 :     </p>
2413 :     <p>리스트에 포함된 컴포넌트는 <em>이름(named)</em>으로 불러낼 수도 있는데, 이 경우 해당 컴포넌트의 이름에 해당하는 문자열을
2414 :     위에서 숫자를 사용할 때 처럼 한 쌍의 이중대괄호 안에 넣어 사용하며, 좀 더 쉽게는 아래와 같은 표현식을 사용하는 것도 가능합니다.
2415 :     </p>
2416 :     <div class="example">
2417 :     <pre class="example">&gt; <var>name</var>$<var>component_name</var>
2418 :     </pre></div>
2419 :    
2420 :     <p><var>name</var>는 리스트의 이름이고, 스트링 연산자($) 뒤의 <var>component_name</var>는 컴포넌트의 이름입니다.
2421 :     </p>
2422 :     <p>이렇게 이름으로 직접 불러내는 방법은 사용자가 해당 컴포넌트의 번호(인덱스)를 기억할 필요없이, 쉽고 정확하게 컴포넌트를 불러낼 수 있는
2423 :     방법입니다.
2424 :     </p>
2425 :     <p>위의 예제로 다시 돌아가면,
2426 :     </p>
2427 :     <p><code>Lst$name</code>이라는 것은 <code>Lst[[1]]</code>와 동일하고, <code>&quot;Fred&quot;</code>라는 값을 가집니다.
2428 :     </p>
2429 :     <p>또 <code>Lst$wife</code>는 <code>Lst[[2]]</code>와 동일하고 <code>&quot;Mary&quot;</code>라는 값을 가집니다.
2430 :     </p>
2431 :     <p><code>Lst$child.ages[1]</code>의 경우, <code>Lst[[4]][1]</code>와 동일하며, <code>4</code>라는 값을 가집니다.
2432 :     </p>
2433 :     <p>또한, 리스트의 컴포넌트 이름을 이중대괄호 안에 사용하는 것고 가능하며, 따라서 <code>Lst[[&quot;name&quot;]]</code>와
2434 :     <code>Lst$name</code>은 동일합니다.이러한 사용법은 아래와 같이 리스트 컴포넌트의 이름이 다른 변수로 저장되어 있는 경우에 유용하게
2435 :     사용될 수 있습니다.
2436 :     </p>
2437 :     <div class="example">
2438 :     <pre class="example">&gt; x &lt;- &quot;name&quot;; Lst[[x]]
2439 :     </pre></div>
2440 :    
2441 :     <p>리스트를 사용하는데 있어 <code>Lst[[1]]</code>와 <code>Lst[1]</code>를 구분하는 것은 매우
2442 :     중요합니다. &lsquo;<samp><code>[[<var>&hellip;</var>]]</code></samp>&rsquo;은 리스트 안의 한 개의 컴포넌트를 선택하기위해 사용하는 연산자인
2443 :     반면,&lsquo;<samp><code>[<var>&hellip;</var>]</code></samp>&rsquo;은 일반적인 첨자로 사용되는 연산자입니다.따라서, 전자는 <em>리스트
2444 :     <code>Lst</code>의 첫번째 컴포넌트</em>를 나타내므로, 만약 ê·¸ 컴포넌트에 이름이 있어도 이름과 상관없이 해당 컴포넌트만을
2445 :     불러냅니다. 하지만 후자는 리스트 <code>Lst</code>의 첫번째 구성요소만을 갖는 서브리스트(sublit)이므로, 이 구성요소에 이름이
2446 :     있다면, 이름이 해당 서브리스트와 함께 불러집니다.
2447 :     </p>
2448 :     <p>컴포넌트들의 이름은 각각의 이름이 구분할 수 있는 최소한의 글자수로 된 약어로 나타내질 수 있습니다. 예를들면, 리스트
2449 :     <code>Lst</code>가 <code>coefficients</code>와 <code>covariance</code>라는 이름의 두 개의 컴포넌트로 구성된 경우,
2450 :     <code>Lst$coe</code>와 <code>Lst$cov</code>으로 간소화하여 불러낼 수 있습니다.
2451 :     </p>
2452 :     <p>사실 컴포넌트들의 이름으로 구성된 벡터는 단순히 리스트의 속성 중 하나라고 ë³¼ 수 있으며, 다른 속성들처럼 다룰 수 있습니다. 물론
2453 :     리스트를 제외한 다른 객체들 역시 <em>names</em>을 속성의 하나로 포함할 수 있습니다.
2454 :     </p>
2455 :     <hr>
2456 : gnustats 1254 <a name="g_t_00eb_00a6_00ac_00ec_008a_00a4_00ed_008a_00b8_00eb_00a5_00bc-_00ec_0083_009d_00ec_0084_00b1_00ea_00b3_00bc-_00ec_0088_0098_00ec-_0095"></a>
2457 :     <a name="e_007c_0021i_0024_003fi_002ceY_003d1_002f4-ii_002b_002de31_002f4-ii-"></a>
2458 :     <h3 class="section">6.2 리스트를 생성과 수정</h3>
2459 : gnustats 1203
2460 :     <p>이미 만들어놓은 여러개의 객체를 <code>list()</code> 함수를 사용하여 새로운 리스트로 생성할 수 있습니다.
2461 :     </p>
2462 :     <div class="example">
2463 :     <pre class="example">&gt; Lst &lt;- list(<var>name_1</var>=<var>object_1</var>, <var>&hellip;</var>, <var>name_m</var>=<var>object_m</var>)
2464 :     </pre></div>
2465 :    
2466 :     <p>아래와 같은 할당문을 사용하면, (사용자가 자유롭게 선택한) <var>object_1</var>, <var>&hellip;</var>,
2467 :     <var>object_m</var>와 같은 이름을 갖는 <em>m</em> 개의 컴포넌트로 구성된 리스트 <code>Lst</code>를 생성합니다. 만약
2468 :     이렇게 이름을 할당하는 과정이 생략되면, 컴포넌트들은 숫자로만 구분됩니다. 새로운 리스트가 생성될 때 기존의 객체들은 단순히
2469 :     컴포넌트로서 <em>복사된 것</em>이기 때문에 새로운 리스트의 생성이 기존의 객체에 아무런 영향을 주지 않습니다.
2470 :     </p>
2471 :     <p>리스트에 새로운 컴포넌트를 추가하고 싶을 경우, 아래와 같이 첨자를 이용하는 것도 가능합니다.
2472 :     </p>
2473 :     <div class="example">
2474 :     <pre class="example">&gt; Lst[5] &lt;- list(matrix=Mat)
2475 :     </pre></div>
2476 :    
2477 :    
2478 :     <hr>
2479 : gnustats 1244 <a name="Concatenating-lists-_0028_00eb_00a6_00ac_00ec_008a_00a4_00ed_008a_00b8-_00ec_0097_00b0_00ea_00b2_00b0_00ed_0095_0098_00ea_00b8_00b0_0029"></a>
2480 :     <a name="Concatenating-lists-_0028e_007c_0021i_0024_003fi_002c-i_00b0e2_00b0ie_002c_00b0_0029"></a>
2481 :     <h4 class="subsection">6.2.1 Concatenating lists (리스트 연결하기)</h4>
2482 :     <a name="index-Concatenating-lists-_0028e_007c_0021i_0024_003fi_002c-i_00b0e2_00b0ie_002c_00b0_0029"></a>
2483 : gnustats 1203
2484 :     <a name="index-c-3"></a>
2485 :     <p>여러개의 리스트를 하나로 묶고 싶은 경우, 아래와 같이 함수 <code>c()</code>를 이용하면 입력된 순서대로 하나로 묶인 리스트가
2486 :     생성됩니다.
2487 :     </p>
2488 :     <div class="example">
2489 :     <pre class="example">&gt; list.ABC &lt;- c(list.A, list.B, list.C)
2490 :     </pre></div>
2491 :    
2492 :     <p>앞 부분에서 연결함수를 사용해서 입력인자인 벡터들을 모두 연결해서 하나의 벡터로 생성했던 것과 비슷합니다. 다만, 리스트를 연결할 경우,
2493 :     <code>dim</code>을 포함한 모든 리스트의 속성이 무시된 채 작업된다는 점 정도의 차이가 있을 뿐 입니다.
2494 :     </p>
2495 :    
2496 :     <hr>
2497 : gnustats 1235 <a name="Data-frames-_0028_00eb_008d_00b0_00ec_009d_00b4_00ed_0084_00b0-_00ed_0094_0084_00eb-_0088_00ec_009e_0084_0029"></a>
2498 :     <a name="Data-frames-_0028e_00b0i_0027i_00b0-ie-i_0029"></a>
2499 :     <h3 class="section">6.3 Data frames (데이터 프레임)</h3>
2500 :     <a name="index-Data-frames-_0028e_00b0i_0027i_00b0-ie-i_0029"></a>
2501 : gnustats 1203
2502 :     <p><em>데이터 프레임 (data frame)</em>은 <code>&quot;data.frame&quot;</code>이라는 클래스를 가진 리스트입니다.하지만 데이터
2503 :     프레임을 리스트와 구분짓는 다음과 같은 몇가지 특징이 있습니다.
2504 :     </p>
2505 :     <ul>
2506 :     <li> 우선, 데이터 프레임에 입력될 수 있는 자료는 반드시 (수치형, 문자형 또는 논리형) 벡터, 요인, 수치형 행렬, 리스트, 또는 다른
2507 :     데이터 프레임 중 하나이어야만 합니다.
2508 :     </li><li> 또 데이터 프레임을 구성하는 각각의 열은 변수로 인식되므로, 입력되는 행렬의 열의 개수, 리스트의 구성요소의 개수, 또는 데이터 프레임의
2509 :     변수의 개수를 더한만큼 데이터 프레임의 크기가 확장됩니다.
2510 :     </li><li> 데이터 프레임에 입력되는 수치형 벡터, 논리형, 그리고 문자형 벡터들을은 모두 디폴트로 요인으로 강제형변환 되도록 지정되어 있으며,
2511 : gnustats 1220 입력된 벡터의 중복없이 정렬된 값을 그 수준으로 갖습니다. <a name="DOCF16" href="#FOOT16"><sup>16</sup></a>.
2512 : gnustats 1203 </li><li> 데이터 프레임 내의 벡터형 변수(즉, 열벡터)는 모두 <em>동일한 길이 (same length)</em>를 가져야하며, 행렬형 변수는 모두
2513 :     같은 <em>행의 개수 (row size)</em>를 가져야합니다.
2514 :     </li></ul>
2515 :    
2516 :     <p>많은 경우, 데이터 프레임이라는 것은 모드(mode)와 속성(attribute)이 조금 다른 행렬이 하나로 보아도 무방합니다. 따라서
2517 :     행렬에서 했던 것 처럼, 행렬 인덱스를 사용하여 데이터 프레임을 행이나 열 중 일부를 임의로 선택할 수 있습니다.
2518 :     </p>
2519 :    
2520 :     <hr>
2521 : gnustats 1252 <a name="g_t_00eb_008d_00b0_00ec_009d_00b4_00ed_0084_00b0-_00ed_0094_0084_00eb-_0088_00ec_009e_0084-_00ec_0083_009d_00ec_0084_00b1_00ed_0095_0098_00ea_00b8_00b0"></a>
2522 :     <a name="e_00b0i_0027i_00b0-ie-i-ii_002b_002die_002c_00b0"></a>
2523 :     <h4 class="subsection">6.3.1 데이터 프레임 생성하기</h4>
2524 : gnustats 1203
2525 :     <p>데이터 프레임의 열 (또는 컴포넌트)를 구성하게 될 객체들의 위에서 언급한 조건들을 충족시키면, 다음과 같이
2526 :     <code>data.frame</code> 함수를 사용하여 데이터 프레임을 생성할 수 있습니다.
2527 :     <a name="index-data_002eframe"></a>
2528 :     </p>
2529 :     <div class="example">
2530 :     <pre class="example">&gt; accountants &lt;- data.frame(home=statef, loot=incomes, shot=incomef)
2531 :     </pre></div>
2532 :    
2533 :     <p>위의 예제에서 사용된 <code>statef</code>는 이산형 데이터 벡터이고, <code>incomes</code>는 연속형 데이터 벡터, 그리고
2534 :     <code>incomef</code>는 범주화된 값을 갖는 벡터입니다. 따라서 새로 생성될 데이터 프레임 <code>accountants</code>은
2535 :     <code>home</code>, <code>loot</code>, 그리고 <code>shot</code>라는 세 변수로 구성되는데, 벡터 <code>statef</code>는
2536 :     <code>home</code>라른 변수로, 벡터 <code>incomes</code>는 <code>loot</code>라는 변수로, 마지막으로 벡터
2537 :     <code>incomef</code>는 <code>shot</code>라는 변수로 저장됨을 의미합니다.컴포넌트들이 위와 같은 데이터 프레임으로써의 요건을
2538 :     만족하는 리스트라면 함수 <code>as.data.frame()</code>를 사용하여 데이터 프레임으로 <em>강제형변환
2539 :     (coerced)</em>시키는 것이 가능합니다.
2540 :     <a name="index-as_002edata_002eframe"></a>
2541 :     </p>
2542 :     <p>이미 저장된 데이터를 가져와 데이터 프레임을 생성하기 위한 가장 쉬운 방법은 외부 파일에서 데이터를 읽어들일 때 사용하는
2543 : gnustats 1244 <code>read.table()</code> 함수를 사용하는 것 겁니다.이 함수에 대해서는 <a href="#Reading-data-from-files-_0028_00ed_008c_008c_00ec_009d_00bc_00eb_00a1_009c_00eb_00b6_0080_00ed_0084_00b0-_00eb_008d_00b0_00ec_009d_00b4_00ed_0084_00b0-_00ec_009d_00bd_00ec_0096_00b4_00ec_0098_00a4_00ea_00b8_00b0_0029">Reading data from files (파일로부터 데이터 읽어오기)</a>편에서 더 자세히 다루도록 하겠습니다.
2544 : gnustats 1203 </p>
2545 :     <hr>
2546 : gnustats 1252 <a name="attach_0028_0029_00ec_0099_0080-detach_0028_0029"></a>
2547 : gnustats 1203 <a name="attach_0028_0029-and-detach_0028_0029"></a>
2548 : gnustats 1291 <h4 class="subsection">6.3.2 <code>attach()</code> and <code>detach()</code></h4>
2549 : gnustats 1203 <a name="index-attach"></a>
2550 :     <a name="index-detach"></a>
2551 :    
2552 :     <p>스트링(<code>$</code>) 연산자는, <code>accountants$home</code>와 같이 리스트의 컴포넌트를 불러내기 위해 사용하지만 이
2553 :     방법이 언제나 가장 편리한 것은 아닙니다. (특히 구성요소가 많은 경우라면,) 리스트나 데이터 프레임의 구성요소들의 이름을 필요한 동안만
2554 :     변수이름처럼 나열해서 쓸 수 있도록하면, 한번에 하나씩 리스트 상의 이름을 사용해서 컴포넌트를 불러내는 번거로움을 피할 수 있습니다.
2555 :     </p>
2556 :     <p><code>attach()</code> 함수의 경우, 리스트나 데이터 프레임과 같은 형태의 &rsquo;데이터베이스(database)&rsquo;를 인자로
2557 :     받습니다. 따라서, 세개의 변수 <code>lentils$u</code>, <code>lentils$v</code>, <code>lentils$w</code>로 구성된
2558 :     데이터 프레임<code>lentils</code>을 존재하고 여기에 <code>attach()</code> 함수를 사용하면, 해당 데이터 프레임의
2559 :     탐색경로(search path)가 position&nbsp;2<!-- /@w -->로 바뀌며, 이것은 변수 <code>u</code>, <code>v</code>, <code>w</code>를
2560 :     담지 않는 경로인 position&nbsp;1,작업&nbsp;<!-- /@w -->와 별개이므로, attach 함수가 적용된 데이터 프레임의 구성요소인
2561 :     <code>u</code>, <code>v</code>, <code>w</code>변수들을 이들의 이름만으로(별도의 스트링 연산자나 인덱스를 사용하지 않고) 불러내는
2562 :     것이 가능해집니다.
2563 :     </p>
2564 :     <div class="example">
2565 :     <pre class="example">&gt; attach(lentils)
2566 :     </pre></div>
2567 :    
2568 :     <p><code>attach()</code>를 사용시 주의할 점은, 다음과 같이 할당문을 사용할 경우, 이미 존재하던 데이터 프레임 내 컴포넌트인
2569 :     <code>u</code>가 연산의 결과물로 대체된다기 보다는, 탐색경로 상의 position&nbsp;1,<!-- /@w -->에서 현재 작업 디렉토리에 새로운 변수
2570 :     <code>u</code>가 생성되어 이미 존재하는 변수를 가로막게된다는 것 입니다. (따라서 위 명령문을 실행하면 <code>lentils</code>내
2571 :     변수 <code>v</code>와 <code>w</code>의 더하기 연산의 결과가 <code>u</code>라는 이름의 객체가 되지만, 이 객체가 데이터 프레임
2572 :     <code>lentils</code>내의 <code>u</code>로 저장되지는 않습니다. <code>attach()</code> 사용이후의 연산은 최상위 탐색경로인
2573 :     position&nbsp;1<!-- /@w -->에서 이루어지므로 데이터 프레임이 위치하는 position&nbsp;2<!-- /@w -->에 있는<code>u</code>가 영향을 받지 않기
2574 :     때문입니다.)
2575 :     </p>
2576 :     <div class="example">
2577 :     <pre class="example">&gt; u &lt;- v+w
2578 :     </pre></div>
2579 :    
2580 :     <p>만약, 데이터 프레임 자체에 변경된 내용을 영구 저장하고싶다면, <code>$</code> 연산자를 사용하여 다음과 같이 따로 저장해야 합니다:
2581 :     </p>
2582 :     <div class="example">
2583 :     <pre class="example">&gt; lentils$u &lt;- v+w
2584 :     </pre></div>
2585 :    
2586 :     <p>하지만, 이렇게 컴포넌트 <code>u</code>에 새로 저장된 값들은 데이터 프레임을 (<code>detach()</code>함수를 사용해서)
2587 :     분리(detach)한 후 다시 (<code>attach()</code> 함수로) 불러들이는(attach) 과정을 통해서 확인할 수 있습니다.
2588 :     </p>
2589 :     <p>데이터 프레임을 현재 경로에서 다시 분리(detach)시키기 위해, 다음과 같이 <code>detach()</code> 함수를 사용할 수
2590 :     있습니다.)
2591 :     </p>
2592 :     <div class="example">
2593 :     <pre class="example">&gt; detach()
2594 :     </pre></div>
2595 :    
2596 :     <p>좀 더 정확하게 설명하면, 이 함수는 position&nbsp;2<!-- /@w --> 상에 위치한 현재 작업 중인 개체(데이터 프레임)을 이 경로에서
2597 :     분리시키는 역할을 합니다. (즉, 경로가 position&nbsp;1<!-- /@w -->로 재변경 됩니다.) 따라서, 데이터 프레임을 분리하고 난 후의 현재
2598 :     작업상황(context)에서는, 따로 <code>lentils$u</code>와 같이 지정하지 않는한, 변수 <code>u</code>, <code>v</code>
2599 :     and <code>w</code>을 사용하는 것이 더이상 가능하지 않습니다. 개체(데이터 프레임)들이 탐색 경로 상 2 보다 큰 숫자의
2600 :     position<!-- /@w -->에 위치할 경우, 이들을 해당 경로에서 분리(detach)하기위해 <code>detach</code> 함수에 경로 번호를
2601 :     지정하는 것이 가능합니다. 하지만, 언제나<code>detach(lentils)</code> 또는 <code>detach(&quot;lentils&quot;)</code>ê³¼
2602 :     같이 데이터 프레임의 이름을 직접 입력하는 편이 실수를 줄일 수 있는 보다 안전한 방법입니다.
2603 :     </p>
2604 :     <blockquote>
2605 :     <p><b>Note:</b> R에서 리스트나 데이터 프레임은 반드시 position 2 또는 ê·¸ 이상의 위치에만 연결할(attach) 수 있습니다. 또,
2606 :     연결한다(attach)는 것은 존재하는 객체를 <em>복사(copy)</em>해서 가져온다는 의미입니다. 이렇게 연결된(attach)
2607 :     개체들은<code>할당(assign)을 통하여</code> 변경하는 것이 가능합니다. 하지만, 이 경우 원래의 리스트나 데이터 프레임은 변경된 값에
2608 :     영향을 받지 않습니다.
2609 :     </p></blockquote>
2610 :    
2611 :     <hr>
2612 : gnustats 1252 <a name="g_t_00eb_008d_00b0_00ec_009d_00b4_00ed_0084_00b0-_00ed_0094_0084_00eb-_0088_00ec_009e_0084-_00ed_0099_009c_00ec_009a_00a9_00ed_0095_0098_00ea_00b8_00b0"></a>
2613 :     <a name="e_00b0i_0027i_00b0-ie-i-ii_00a9ie_002c_00b0"></a>
2614 :     <h4 class="subsection">6.3.3 데이터 프레임 활용하기</h4>
2615 : gnustats 1203
2616 :     <p>하나의 작업 디렉토리에서 여러 개의 작업을 동시에 수행하는데 도움이 될만한 팁을 하나 드리자면,
2617 :     </p>
2618 :     <ul>
2619 :     <li> 데이터 프레임 내의 변수들은 잘 정의된 (well defined) 그리고 분명히 구분되는(separate) 개념을 담고있어야 하며,
2620 :     이름만으로도 충분히 ê·¸ 의미를 짐작할 수 있는 변수명을 사용해야 한다는 것 입니다.
2621 :     </li><li> position&nbsp;2<!-- /@w --> 상에서 적절한 데이터 프레임을 불러들여서(attach) 작업 중이라면, 연산의 결과물과 작업 중인
2622 :     임시(temporary)변수들은 작업 디렉토리가 위치한 level&nbsp;1<!-- /@w -->에서 사용하도록 합니다;
2623 :     </li><li> 해당 작업을 끝내기 전, 작업 중인 변수들 중 나중에 다시 사용하기 위해 데이터 프레임 내에 저장하고 싶은 것이 있다면 <code>$</code>를
2624 :     이용한 할당문으로 해당 변수를 저장한 다음, <code>detach()</code> 함수를 사용합니다;
2625 :     </li><li> 마지막으로 아직 작업 디렉토리에 남아있는 임시로 사용했지만 더 이상 필요없는 변수들은 모두 삭제해서 작업 디렉토리를 깨끗하게 유지합니다.
2626 :     </li></ul>
2627 :    
2628 :     <p>이렇식으로 작업 공간을 유지하면, 같은 디렉토리 내에서 <code>x</code>, <code>y</code>, <code>z</code>와 같은 (매우 흔한 이름의)
2629 :     변수들을 이용해서 여러 작업을 동시에 수행해야 하는 겅우라도 비교적 쉽게 변수들을 다룰 수 있습니다.
2630 :     </p>
2631 :     <hr>
2632 : gnustats 1254 <a name="Attaching-arbitrary-lists-_0028_00ec_009e_0084_00ec_009d_0098_00ec-_0081_00ec_009d_00b8-_00eb_00a6_00ac_00ec_008a_00a4_00ed_008a_00b8_00eb_00a5_00bc-_00ec_0097_00b0_00ea_00b2_00b0_00ed_0095_0098_00ea_00b8_00b0_0029"></a>
2633 :     <a name="Attaching-arbitrary-lists-_0028iii-i_002c-e_007c_0021i_0024_003fi_002ceY_003d1_002f4-i_00b0e2_00b0ie_002c_00b0_0029"></a>
2634 :     <h4 class="subsection">6.3.4 Attaching arbitrary lists (임의적인 리스트를 연결하기)</h4>
2635 : gnustats 1203
2636 :     <p>일반함수(generic function)의 하나인 <code>attach()</code>함수는 디렉토리나 데이터 프레임 뿐만 아니라 다른 클래스의
2637 :     객체를 대상으로도 탐색경로(search path)를 연결(attach)하는 작업을 수행합니다. 특히, 객체의 모드가
2638 :     <code>&quot;list&quot;</code>인 경우는 데이터프레임과 동일한 방법으로 사용 가능합니다:
2639 :     </p>
2640 :     <div class="example">
2641 :     <pre class="example">&gt; attach(any.old.list)
2642 :     </pre></div>
2643 :    
2644 :     <p><code>attach()</code>에 의해서 연결된 객체는 <code>detach</code> 함수에 의해서 분리되며, 이때 해당 위치의 번호나, 좀 더
2645 :     바람직하게는 해당 객체의 이름을 사용하여 분리될 대상을 구체적으로 지정할 수 있습니다.
2646 :     </p>
2647 :     <hr>
2648 : gnustats 1252 <a name="g_t_00ed_0083_0090_00ec_0083_0089_00ea_00b2_00bd_00eb_00a1_009c_00eb_00a5_00bc-_00ea_00b4_0080_00eb_00a6_00ac_00ed_0095_0098_00ea_00b8_00b0"></a>
2649 :     <a name="iie21_002f2e_00a1eY_003d1_002f4-e_0027e_007c_0021ie_002c_00b0"></a>
2650 :     <h4 class="subsection">6.3.5 탐색경로를 관리하기</h4>
2651 : gnustats 1203 <a name="index-search"></a>
2652 :     <a name="index-Search-path"></a>
2653 :    
2654 :     <p><code>search</code> 함수는 현재 탐색경로를 보여줌으로서 사용자가 현재 연결하여 작업하고 있는 데이터 프레임 및 리스트 (그리고
2655 :     패키지들)를 확인할 수 있도록 해줍니다. 처음으로 <code>search</code>를 수행하면 아래와 같은 결과가 출력됩니다. 여기서
2656 :     <code>.GlobalEnv</code>라는 것은 현재 작업 중인 작업공간(workspace)을 의미합니다.
2657 :     </p>
2658 :     <div class="example">
2659 :     <pre class="example">&gt; search()
2660 :     [1] &quot;.GlobalEnv&quot; &quot;Autoloads&quot; &quot;package:base&quot;
2661 :     </pre></div>
2662 : gnustats 1220 <p><a name="DOCF17" href="#FOOT17"><sup>17</sup></a>.
2663 : gnustats 1203 </p>
2664 :     <p>데이터프레임 <code>lentils</code>을 연결(attached)하고나면, <code>search()</code>는 아래와 같은 결과를 보여줍니다.
2665 :     </p>
2666 :     <div class="example">
2667 :     <pre class="example">&gt; search()
2668 :     [1] &quot;.GlobalEnv&quot; &quot;lentils&quot; &quot;Autoloads&quot; &quot;package:base&quot;
2669 :     &gt; ls(2)
2670 :     [1] &quot;u&quot; &quot;v&quot; &quot;w&quot;
2671 :     </pre></div>
2672 :    
2673 :     <p><code>ls</code> 혹은 <code>objects</code> 함수를 이용하여 탐색경로(serach path) 내의 어떤 위치(position
2674 :     1,2,..)에서나 어떤 객체가 사용 중인지 확인할 수 있습니다. 위에서 함수 <code>ls()</code>안에 사용된 숫자 <em>2</em>는
2675 :     position&nbsp;2<!-- /@w -->를 대상으로 한다는 의미입니다.
2676 :     </p>
2677 :     <p>마지막으로, 사용중인 데이터프레임을 분리(detach)하고나서 탐색경로(search path)에서 정말로 사라졌는지 확인합니다.
2678 :     </p>
2679 :     <div class="example">
2680 :     <pre class="example">&gt; detach(&quot;lentils&quot;)
2681 :     &gt; search()
2682 :     [1] &quot;.GlobalEnv&quot; &quot;Autoloads&quot; &quot;package:base&quot;
2683 :     </pre></div>
2684 :    
2685 :     <hr>
2686 : gnustats 1244 <a name="Reading-data-from-files-_0028_00ed_008c_008c_00ec_009d_00bc_00eb_00a1_009c_00eb_00b6_0080_00ed_0084_00b0-_00eb_008d_00b0_00ec_009d_00b4_00ed_0084_00b0-_00ec_009d_00bd_00ec_0096_00b4_00ec_0098_00a4_00ea_00b8_00b0_0029"></a>
2687 :     <a name="Reading-data-from-files-_0028ii1_002f4e_00a1ePi_00b0-e_00b0i_0027i_00b0-i1_002f2i_0027i_0024_003fe_002c_00b0_0029"></a>
2688 :     <h2 class="chapter">7 Reading data from files (파일로부터 데이터 읽어오기)</h2>
2689 :     <a name="index-Reading-data-from-files-_0028ii1_002f4e_00a1ePi_00b0-e_00b0i_0027i_00b0-i1_002f2i_0027i_0024_003fe_002c_00b0_0029"></a>
2690 : gnustats 1203
2691 :     <p>용량이 큰 데이터 객체는 현재 작업하고 있는 R 세션에서 키보드로 입력하는 것보다는 외부에 저장되어 있는 데이터파일을 불러들이는
2692 :     것이 편리하고 빠른 방법입니다. R의 입력 도구는 단순하여 요구조건이 다소 엄격하고 유연하지 않습니다. R 설계자들에 의해
2693 : gnustats 1220 R에서 데이터를 읽어들일 수 있는 요구사항을 충족시키기 위해 파일에디터(file editor) 혹은 Perl<a name="DOCF18" href="#FOOT18"><sup>18</sup></a>과 같은 다른 도구를 이용하여 여러분의 입력 파일을 수정할 수 있는 명백한 추측이
2694 : gnustats 1203 있습니다. 일반적으로 이것은 매우 단순합니다.
2695 :     </p>
2696 :     <p>만약 변수들이 데이터 프레임에서 다루어질 것이라면 (우리가 그렇게 될 것이라고 강하게 가정하는 것과 같이), 전체 데이터 프레임은
2697 :     <code>read.table()</code> 함수에 의해 직접적으로 읽을 수 있습니다. 직접적으로 호출할 수 있는 보다 근본적인 입력 함수인
2698 :     <code>scan()</code>도 있습니다.
2699 :     </p>
2700 :     <p>데이터의 입출력에 관한 더 자세한 사항에 대해서는 <em>R Data Import/Export</em> 문서를 참조하시길 바랍니다.
2701 :     </p>
2702 :    
2703 :     <hr>
2704 :     <a name="The-read_002etable_0028_0029-function"></a>
2705 : gnustats 1252 <a name="read_002etable_0028_0029-i_0022i"></a>
2706 :     <h3 class="section">7.1 <code>read.table()</code> 함수</h3>
2707 : gnustats 1203 <a name="index-read_002etable"></a>
2708 :    
2709 :     <p>데이터 프레임 전체를 한번에 불러오기 위해서는, 외부 파일이 특정한 형식을 가지고 있어야만 합니다.
2710 :     </p>
2711 :     <ul>
2712 :     <li> 파일내의 첫번째 행은 데이터 프레임에서 각 변수들에 대해 <em>변수명</em>을 가져야 합니다.
2713 :    
2714 :     </li><li> 파일내의 첫 번째 행 다음 부터는 <em>행레이블(row label)</em>ê³¼ 각 변수에 대한 변수값이 있어야 합니다.
2715 :     </li></ul>
2716 :    
2717 :     <p>만약, 첫번째 행을 구성하는 항목들의 개수가 두번째 행을 구성하는 항목들의 개수보다 적을 경우, 강제적으로 첫번째 행의 구조에 따라
2718 :     맞추어지게 됩니다. 따라서 데이터 프레임으로 읽어들일 파일의 처음 몇 줄은 다음과 같이 보여질 것입니다.
2719 :     </p>
2720 :     <blockquote>
2721 :     <table class="cartouche" border="1"><tr><td>
2722 :     <div class="example">
2723 :     <pre class="example"><span class="roman">Input file form with names and row labels:</span>
2724 :    
2725 :     Price Floor Area Rooms Age Cent.heat
2726 :     01 52.00 111.0 830 5 6.2 no
2727 :     02 54.75 128.0 710 5 7.5 no
2728 :     03 57.50 101.0 1000 5 4.2 no
2729 :     04 57.50 131.0 690 6 8.8 no
2730 :     05 59.75 93.0 900 5 1.9 yes
2731 :     ...
2732 :     </pre></div>
2733 :     </td></tr></table>
2734 :     </blockquote>
2735 :    
2736 :     <p>기본적으로 R이 데이터 파일을 읽어올때, (행레이블를 제외하고) 예제와 같이 수치값(numeric item)은
2737 :     숫자변수(numeric variables)로, 그렇지 않다면 <code>Cent.heat</code>와 같이 요인(factor)으로
2738 :     비숫자변수(non-numeric variables)로 읽어들입니다.
2739 :     </p>
2740 :     <p>함수 <code>read.table()</code>는 직접적으로 데이터 프레임을 읽어들이는데 사용될 수 있습니다.
2741 :     </p>
2742 :     <div class="example">
2743 :     <pre class="example">&gt; HousePrice &lt;- read.table(&quot;houses.data&quot;)
2744 :     </pre></div>
2745 :    
2746 :     <p>여러분은 종종 행레이블을 직접적으로 포함하는 것을 생략하고 기본값을 사용하길 원하는 경우가 있습니다. 이러한 경우 ê·¸ 파일에는 아래와
2747 :     같이 행레이블 열이 생략되어 있을 것입니다.
2748 :     </p>
2749 :     <blockquote>
2750 :     <table class="cartouche" border="1"><tr><td>
2751 :     <div class="example">
2752 :     <pre class="example"><span class="roman">Input file form without row labels:</span>
2753 :    
2754 :     Price Floor Area Rooms Age Cent.heat
2755 :     52.00 111.0 830 5 6.2 no
2756 :     54.75 128.0 710 5 7.5 no
2757 :     57.50 101.0 1000 5 4.2 no
2758 :     57.50 131.0 690 6 8.8 no
2759 :     59.75 93.0 900 5 1.9 yes
2760 :     ...
2761 :     </pre></div>
2762 :     </td></tr></table>
2763 :     </blockquote>
2764 :    
2765 :     <p>이런 경우에는 아래와 같이 <code>read.table()</code> 함수를 사용시 <code>header=TRUE</code> 옵션을 함께 사용합니다.
2766 :     </p>
2767 :     <div class="example">
2768 :     <pre class="example">&gt; HousePrice &lt;- read.table(&quot;houses.data&quot;, header=TRUE)
2769 :     </pre></div>
2770 :    
2771 :     <p><code>header=TRUE</code> 옵션은 첫 번째 줄이 헤더 줄이라는 것을 특정하여 파일의 구조로부터의 의미에 의해 명시적인 행레이블이
2772 :     주어지지 않았다는 것을 나타냅니다.
2773 :     </p>
2774 :    
2775 :     <hr>
2776 :     <a name="The-scan_0028_0029-function"></a>
2777 : gnustats 1252 <a name="scan_0028_0029-i_0022i"></a>
2778 :     <h3 class="section">7.2 <code>scan()</code> 함수</h3>
2779 : gnustats 1203 <a name="index-scan"></a>
2780 :    
2781 :     <p>데이터 벡터들이 같은 길이를 가지고 있고 이들은 동시에 병렬적으로 읽어들여진다고 가정해 보십시오. 그리고 벡터의 개수는 세개인데 첫번째
2782 :     벡터는 문자형 모드를 가지고, 나머지 두 벡터는 수치형 모드를 가지며, 이 벡터들은 <code>input.dat</code>라는 파일내에 저장이
2783 :     되어 있다고 가정합니다. <code>scan()</code>함수를 이용하여 세개의 벡터를 리스트 형식으로서 불러오는 첫 번째 단계는 다음과
2784 :     같습니다.
2785 :     </p>
2786 :     <div class="example">
2787 :     <pre class="example">&gt; inp &lt;- scan(&quot;input.dat&quot;, list(&quot;&quot;,0,0))
2788 :     </pre></div>
2789 :    
2790 :     <p><code>scan()</code>함수의 두번째 인자는 어떤 모드(mode)로서 ê·¸ 세 가지 벡터들을 읽어올 것인가에 대한 더미 리스트
2791 :     구조(dummy list structure)입니다. <code>inp</code>에 담겨진 결과는 그것의 구성요소가 읽혀진 세 벡터들인 리스트
2792 :     입니다. 데이터 값들(data items)을 세 개의 구분된 벡터로 분해하기 위해서 다음과 같이 할당(assignments)을
2793 :     이용합니다.
2794 :     </p>
2795 :     <div class="example">
2796 :     <pre class="example">&gt; label &lt;- inp[[1]]; x &lt;- inp[[2]]; y &lt;- inp[[3]]
2797 :     </pre></div>
2798 :    
2799 :     <p>위에서 소개한 방법보다 더 편한 방법은 아래에서 보는 것과 같이 더미 리스트 구조를 사용할 때 바로 이름을 부여하는 것입니다. 그러한
2800 :     경우 ê·¸ 이름들은 읽혀진 벡터들에 접근하는데 사용될 수 있습니다. 예를 들어 다음과 같습니다.
2801 :     </p>
2802 :     <div class="example">
2803 :     <pre class="example">&gt; inp &lt;- scan(&quot;input.dat&quot;, list(id=&quot;&quot;, x=0, y=0))
2804 :     </pre></div>
2805 :    
2806 :     <p>여러분이 각각의 변수들에 접근하길 원한다면 그것들은 다음과 같이 워킹프레임(the working frame)에서 변수들에
2807 :     재할당(re-assigned)되거나
2808 :     </p>
2809 :     <div class="example">
2810 :     <pre class="example">&gt; label &lt;- inp$id; x &lt;- inp$x; y &lt;- inp$y
2811 :     </pre></div>
2812 :    
2813 : gnustats 1254 <p>또는 그 리스트가 탐색경로의 position&nbsp;2<!-- /@w -->에 첨부될 수 있습니다(이에 대해서는 see <a href="#Attaching-arbitrary-lists-_0028_00ec_009e_0084_00ec_009d_0098_00ec-_0081_00ec_009d_00b8-_00eb_00a6_00ac_00ec_008a_00a4_00ed_008a_00b8_00eb_00a5_00bc-_00ec_0097_00b0_00ea_00b2_00b0_00ed_0095_0098_00ea_00b8_00b0_0029">Attaching arbitrary lists (임의적인 리스트를 연결하기)</a>를 참고하시길 바랍니다).
2814 : gnustats 1203 </p>
2815 :     <p>만약, 아래와 같이 두번째 인자가 리스트가 아닌 단일 숫자값이라면, 하나의 벡터가 읽혀지게 됩니다. 그리고 반드시 벡터의 모든 구성요소는
2816 :     더미 값(dummy value)ê³¼ 같이 동일한 모드를 가지고 있어야 합니다.
2817 :     </p>
2818 :     <div class="example">
2819 :     <pre class="example">&gt; X &lt;- matrix(scan(&quot;light.dat&quot;, 0), ncol=5, byrow=TRUE)
2820 :     </pre></div>
2821 :    
2822 :     <p>더욱 정교한 입력 도구들이 사용가능하며 매뉴얼에 설명되어 있습니다.
2823 :     </p>
2824 :     <hr>
2825 : gnustats 1252 <a name="g_t_00eb_0082_00b4_00ec_009e_00a5_00eb_0090_009c-_00eb_008d_00b0_00ec_009d_00b4_00ed_0084_00b0_00ec-_008b_00ec_009d_0084-_00ec_009d_00b4_00ec_009a_00a9_00ed_0095_0098_00ea_00b8_00b0"></a>
2826 :     <a name="e_0027iY_003de-e_00b0i_0027i_00b0i-i-i_0027i_00a9ie_002c_00b0"></a>
2827 :     <h3 class="section">7.3 내장된 데이터셋을 이용하기</h3>
2828 :     <a name="index-e_0027iY_003de-e_00b0i_0027i_00b0i-i-i_0027i_00a9ie_002c_00b0"></a>
2829 : gnustats 1203 <a name="index-data"></a>
2830 :    
2831 :     <p>R은 기본적으로 대략 100여개의 데이터셋을 <strong>datasets</strong> 패키지를 통하여 제공하고 있고 (Rê³¼ 함께 제공되는
2832 :     추천 패키지를 포함하여) 다른 것들이 패키지들에 따라 사용가능합니다. 현재 사용가능한 데이터셋의 목록을 확인하고 싶으시다면 아래와 같이
2833 :     <code>data()</code>함수를 이용하시면 됩니다.
2834 :     </p>
2835 :     <div class="example">
2836 :     <pre class="example">data()
2837 :     </pre></div>
2838 :    
2839 :     <p>R 버전 2.0.0 부터 Rê³¼ 함께 제공되는 모든 데이터셋은 아래에서 보여지는 것과 같이 데이터셋의 이름을 통하여 바로 접근이
2840 :     가능합니다. 그러나 많은 패키지들이 아직 이전의 R로 데이터세트를 로드하는데 사용되었던 <code>data</code> 방법을 사용하고
2841 :     있습니다. 예를 들어, 다음과 같습니다.
2842 :     </p>
2843 :     <div class="example">
2844 :     <pre class="example">data(infert)
2845 :     </pre></div>
2846 :    
2847 :     <p>그리고 이것은 여기에서의 사례와 같이 표준패키지에서도 아직까지 사용될 수 있습니다. 대부분의 경우 이것은 동일한 이름의 R 객체를
2848 :     로드할 것입니다. 그러나 몇몇의 사례에서 그것은 여러 객체를 로드하므로 로드될 것으로 기대되는 확인하기 위해 객체에 대한 온라인 도움말을
2849 :     참고하시기 바랍니다.
2850 :     </p>
2851 :     <a name="e_0024_003feY_003d_002c-R-i_0022i_0024_003fiSSe_0024_003fe_00a1ePi_00b0-e_00b0i_0027i_00b0eY_003d1_002f4-e_00a1e_00a9ie_002c_00b0"></a>
2852 :     <h4 class="subsection">7.3.1 다른 R 패키지들로부터 데이터를 로딩하기</h4>
2853 :    
2854 :     <p>만약 특정 패키지 내에 제공되어지는 데이터에 접근하고 싶다면 아래와 같이 <code>data()</code>함수의 <code>package</code>라는
2855 :     인자를 사용합니다.
2856 :     </p>
2857 :     <div class="example">
2858 :     <pre class="example">data(package=&quot;rpart&quot;)
2859 :     data(Puromycin, package=&quot;datasets&quot;)
2860 :     </pre></div>
2861 :    
2862 :     <p>만약 특정 패키지가 <code>library</code> 함수를 이용하여 현재의 작업공간에 연결이 되어 있다면, 패키지에 내장된 데이터셋들은
2863 :     자동으로 검색되게 됩니다.
2864 :     </p>
2865 :     <p>User-contributed packages can be a rich source of datasets.
2866 :     </p>
2867 :     <hr>
2868 : gnustats 1252 <a name="g_t_00eb_008d_00b0_00ec_009d_00b4_00ed_0084_00b0_00eb_00a5_00bc-_00ed_008e_00b8_00ec_00a7_0091_00ed_0095_0098_00ea_00b8_00b0"></a>
2869 :     <a name="e_00b0i_0027i_00b0eY_003d1_002f4-i_002ciSSie_002c_00b0"></a>
2870 :     <h3 class="section">7.4 데이터를 편집하기</h3>
2871 : gnustats 1203
2872 :     <a name="index-edit"></a>
2873 :     <p>만약 사용자가 데이터 프레임이나 행렬의 일부내용을 수정 및 편집을 하고 싶을때 <code>edit</code>는 편집을 위하여 구분된 스프레드시트와
2874 :     같은 환경을 가져옵니다. 이것은 한 번 불러온 데이터세트에 작은 변화를 주는데 유용합니다. 명령은 다음과 같습니다.
2875 :     </p>
2876 :     <div class="example">
2877 :     <pre class="example">&gt; xnew &lt;- edit(xold)
2878 :     </pre></div>
2879 :    
2880 :     <p><code>edit()</code>함수는 데이터셋 <code>xold</code>을 편집한 뒤, 편집된 새로운 내용을 새로운 데이터셋 <code>xnew</code>로
2881 :     저장한다는 의미입니다. 만약, 사용자가 원본 데이터셋 <code>xold</code> 자체를 변경하고자 한다면 가장 단순한 방법은
2882 :     <code>fix(xold)</code> 함수를 이용하는 것인데 이것은 <code>xold &lt;- edit(xold)</code>와 동일한 표현입니다.
2883 :     </p>
2884 :     <p>Use
2885 :     </p>
2886 :     <div class="example">
2887 :     <pre class="example">&gt; xnew &lt;- edit(data.frame())
2888 :     </pre></div>
2889 :    
2890 :     <p>만약에 여러분이 비어있는 데이터 프레임으로부터 윈도우즈 기반의 스프레드시트를 통하여 새로운 데이터를 입력하고자 한다면 아래와 같이 할 수
2891 :     있습니다.
2892 :     </p>
2893 :    
2894 :     <hr>
2895 : gnustats 1252 <a name="g_t_00ed_0099_0095_00eb_00a5-_00eb_00b6_0084_00ed_008f_00ac_00ed_0095_00a8_00ec_0088_0098"></a>
2896 :     <a name="ieY_003d-ePi_0021i_0022i"></a>
2897 :     <h2 class="chapter">8 확률분포함수</h2>
2898 :     <a name="index-ieY_003d-ePi_0021i_0022i"></a>
2899 : gnustats 1203
2900 :    
2901 :     <hr>
2902 : gnustats 1252 <a name="g_t_00ed_0086_00b5_00ea_00b3_0084_00eb_00b6_0084_00ed_008f_00ac_00ed_0091_009c_00eb_0093_00a4_00ec_009d_0084-_00ed_0095_009c_00eb_008d_00b0-_00eb_00ac_00b6_00ec_0096_00b4-_00eb_0086_0093_00ec_009d_0080-R"></a>
2903 :     <a name="iue3ePi_0021ie_0024_003fi-ie_00b0-e_0021Pi_0027-ei-R"></a>
2904 :     <h3 class="section">8.1 통계분포표들을 한데 묶어 놓은 R</h3>
2905 : gnustats 1203
2906 : gnustats 1222 <p>R의 많은 장점들 중 한가지는 다양한 통계분포표를 제공하는 것입니다. P(X &lt;= x)을 알려주는
2907 : gnustats 1203 누적확률(cumulative probability)값, 주어진 확률함수로부터 밀도(density)계산, 주어진 <em>q</em>에 해당하는
2908 : gnustats 1222 퀀타일(quantile)을 계산, P(X &lt;= x) &gt; q)라는 조건을 만족하는 <code>x</code>값
2909 : gnustats 1203 찾기 및 주어진 분포로부터의 난수를 생성할 수 있습니다.
2910 :     </p>
2911 :     <blockquote>
2912 :     <table>
2913 :     <thead><tr><th>Distribution</th><th>R name</th><th>additional arguments</th></tr></thead>
2914 :     <tr><td>beta</td><td><code>beta</code></td><td><code>shape1, shape2, ncp</code></td></tr>
2915 :     <tr><td>binomial</td><td><code>binom</code></td><td><code>size, prob</code></td></tr>
2916 :     <tr><td>Cauchy</td><td><code>cauchy</code></td><td><code>location, scale</code></td></tr>
2917 :     <tr><td>chi-squared</td><td><code>chisq</code></td><td><code>df, ncp</code></td></tr>
2918 :     <tr><td>exponential</td><td><code>exp</code></td><td><code>rate</code></td></tr>
2919 :     <tr><td>F</td><td><code>f</code></td><td><code>df1, df2, ncp</code></td></tr>
2920 :     <tr><td>gamma</td><td><code>gamma</code></td><td><code>shape, scale</code></td></tr>
2921 :     <tr><td>geometric</td><td><code>geom</code></td><td><code>prob</code></td></tr>
2922 :     <tr><td>hypergeometric</td><td><code>hyper</code></td><td><code>m, n, k</code></td></tr>
2923 :     <tr><td>log-normal</td><td><code>lnorm</code></td><td><code>meanlog, sdlog</code></td></tr>
2924 :     <tr><td>logistic</td><td><code>logis</code></td><td><code>location, scale</code></td></tr>
2925 :     <tr><td>negative binomial</td><td><code>nbinom</code></td><td><code>size, prob</code></td></tr>
2926 :     <tr><td>normal</td><td><code>norm</code></td><td><code>mean, sd</code></td></tr>
2927 :     <tr><td>Poisson</td><td><code>pois</code></td><td><code>lambda</code></td></tr>
2928 :     <tr><td>signed rank</td><td><code>signrank</code></td><td><code>n</code></td></tr>
2929 :     <tr><td>Student&rsquo;s t</td><td><code>t</code></td><td><code>df, ncp</code></td></tr>
2930 :     <tr><td>uniform</td><td><code>unif</code></td><td><code>min, max</code></td></tr>
2931 :     <tr><td>Weibull</td><td><code>weibull</code></td><td><code>shape, scale</code></td></tr>
2932 :     <tr><td>Wilcoxon</td><td><code>wilcox</code></td><td><code>m, n</code></td></tr>
2933 :     </table>
2934 :     </blockquote>
2935 :    
2936 :     <p>위의 표를 잘 살펴보면 하나의 규칙을 알 수 있습니다. &lsquo;<samp>d</samp>&rsquo;로 시작하는 함수명은 확률밀도(density)를 구하기 위해 사용이
2937 :     되고,&lsquo;<samp>p</samp>&rsquo;로 시작하는 함수명은 누적확률값(cumulative probability)를 구하기 위해 사용이
2938 :     되며,&lsquo;<samp>q</samp>&rsquo;로 시작하는 함수명은 퀀타일(quantile)을 구하며,&lsquo;<samp>r</samp>&rsquo;로 시작하는 함수명은 시뮬레이션을 위한 난수를
2939 :     생성하는데 사용됩니다.또한, <code>d<var>xxx</var></code>의 첫번째 인자는 <code>x</code>이며,<code>p<var>xxx</var></code>는
2940 :     <code>q</code>, <code>q<var>xxx</var></code>는 <code>p</code>,<code>r<var>xxx</var></code>는
2941 :     <code>n</code>입니다(<code>rhyper</code>, <code>rsignrank</code> 그리고 <code>rwilcox</code>의 경우에는
2942 :     <code>nn</code>입니다).모든 함수에 non-centrality parameter(비중심화 모수)인 <code>ncp</code>를 사용할 수
2943 :     있는 것은 아니므로 보다 더 자세한 사항은 온라인 도움말을 참고하십시오.
2944 :     </p>
2945 :     <p><code>p<var>xxx</var></code>와 <code>q<var>xxx</var></code> 함수들은 모두 <code>lower.tail</code>와
2946 :     <code>log.p</code>라는 논리인자(logical arguments)를 가지며, <code>d<var>xxx</var></code>는 인자
2947 :     <code>log</code>를 가집니다. 이러한 옵션의 사용은 아래에서 보이는 바와 같은 방법으로 생존분석(survival analysis)에서
2948 : gnustats 1222 사용되는 H(t) = -log(1-F(t))이라는 누적 <em>hazard</em>
2949 : gnustats 1203 함수의 계산을 가능하게 합니다.
2950 :     </p>
2951 :     <div class="example">
2952 :     <pre class="example"> - p<var>xxx</var>(t, ..., lower.tail = FALSE, log.p = TRUE)
2953 :     </pre></div>
2954 :    
2955 :     <p>또한, <code>d<var>xxx</var>(..., log = TRUE)</code>와 같은 인자의 설정은 직접적으로 더 정교한
2956 :     로그우도(log-likelihood) 값을 얻을 수 있도록 해줍니다.
2957 :     </p>
2958 :     <p>더 나아가 정규분포로부터 얻은 샘플에 대해서 표준화된 범위에 대한 분포를 함수 <code>ptukey</code>와 <code>qtukey</code>를
2959 :     통하여 얻을 수 있습니다. 또한, 멀티노미얼 (multinomial) 분포에 대한 밀도값과 난수생성은 <code>dmultinom</code>ê³¼
2960 :     <code>rmultinom</code>이라는 함수를 통하여 얻을 수 있습니다. 더 많은 분포에 대해서는 <a href="http://CRAN.R-project.org/package=SuppDists"><strong>SuppDists</strong></a>라는
2961 :     사용자개발패키지(contributed packages)를 찾아보시길 바랍니다.
2962 :     </p>
2963 :     <p>밀도함수를 활용하는 두 가지 예제입니다.
2964 :     </p>
2965 :     <div class="example">
2966 :     <pre class="example">&gt; ## <span class="roman">2-tailed p-value for t distribution</span>
2967 :     &gt; 2*pt(-2.43, df = 13)
2968 :     &gt; ## <span class="roman">upper 1% point for an F(2, 7) distribution</span>
2969 :     &gt; qf(0.01, 2, 7, lower.tail = FALSE)
2970 :     </pre></div>
2971 :    
2972 :     <p>R에서 어떻게 난수를 생성하는지 알고 싶으시다면 온라인 도움말 <code>RNG</code>를 살펴보시길 바랍니다.
2973 :     </p>
2974 :     <hr>
2975 : gnustats 1252 <a name="g_t_00eb_008d_00b0_00ec_009d_00b4_00ed_0084_00b0_00ec_009d_0098-_00eb_00b6_0084_00ed_008f_00ac-_00ec_0082_00b4_00ed_008e_00b4_00eb_00b3_00b4_00ea_00b8_00b0"></a>
2976 :     <a name="e_00b0i_0027i_00b0i-ePi_0021-i_0027i_0027e3_0027e_002c_00b0"></a>
2977 :     <h3 class="section">8.2 데이터의 분포 살펴보기</h3>
2978 : gnustats 1203
2979 :     <p>많은 방법을 통하여 주어진 (일변량) 데이터세트의 분포를 확인해 ë³¼ 수 있습니다. 가장 쉬운 방법은 함수 <code>summary</code> 혹은
2980 :     <code>fivenum</code>를 이용하여 약간 다른 의미의 수치적 요약정보를 살펴 보는 것입니다.
2981 :     <a name="index-summary"></a>
2982 :     <a name="index-fivenum"></a>
2983 :     그리고 <code>stem</code> 함수를 이용하여 &quot;줄기-잎&quot; 그림(&quot;stem and leaf&quot; plot)을 이용하여 확인해 볼수도 있습니다.
2984 :     <a name="index-stem"></a>
2985 :     </p>
2986 :     <div class="example">
2987 :     <pre class="example">&gt; attach(faithful)
2988 :     &gt; summary(eruptions)
2989 :     Min. 1st Qu. Median Mean 3rd Qu. Max.
2990 :     1.600 2.163 4.000 3.488 4.454 5.100
2991 :     &gt; fivenum(eruptions)
2992 :     [1] 1.6000 2.1585 4.0000 4.4585 5.1000
2993 :     &gt; stem(eruptions)
2994 :    
2995 :     The decimal point is 1 digit(s) to the left of the |
2996 :    
2997 :     16 | 070355555588
2998 :     18 | 000022233333335577777777888822335777888
2999 :     20 | 00002223378800035778
3000 :     22 | 0002335578023578
3001 :     24 | 00228
3002 :     26 | 23
3003 :     28 | 080
3004 :     30 | 7
3005 :     32 | 2337
3006 :     34 | 250077
3007 :     36 | 0000823577
3008 :     38 | 2333335582225577
3009 :     40 | 0000003357788888002233555577778
3010 :     42 | 03335555778800233333555577778
3011 :     44 | 02222335557780000000023333357778888
3012 :     46 | 0000233357700000023578
3013 :     48 | 00000022335800333
3014 :     50 | 0370
3015 :     </pre></div>
3016 :    
3017 :     <p>실은 줄기-잎 그림은 히스토그램과 비슷하며 R은 히스토그램을 제공하는 <code>hist</code> 함수를 가지고 있습니다.
3018 :     <a name="index-hist"></a>
3019 :     </p>
3020 :     <div class="example">
3021 :     <pre class="example">&gt; hist(eruptions)
3022 :     ## <span class="roman">make the bins smaller, make a plot of density</span>
3023 :     &gt; hist(eruptions, seq(1.6, 5.2, 0.2), prob=TRUE)
3024 :     &gt; lines(density(eruptions, bw=0.1))
3025 :     &gt; rug(eruptions) # <span class="roman">show the actual data points</span>
3026 :     </pre></div>
3027 :    
3028 :     <a name="index-density"></a>
3029 :     <a name="index-Density-estimation"></a>
3030 :     <p>위의 예제에서 사용된 것과 같이 히스토그램보다 좀 더 정교한 밀도그림(density plot)은 <code>density</code> 함수에 의해서
3031 :     얻을 수 있고 우리는 이 예제에서 <code>density</code>에 의해 만들어진 선을 추가하였습니다. <code>density</code>함수의
3032 :     <code>bw</code>(bandwidth) 인자의 값은 trial-and-error를 통해 얻어집니다. (Bandwidth의 선택에 있어서
3033 :     자동화된 방법이 있는데, <code>bw='SJ'</code>를 이용해보시길 바랍니다).
3034 :     </p>
3035 :     <img src="images/hist.png" alt="images/hist">
3036 :    
3037 :     <p><code>ecdf</code> 함수를 이용하여 경험적 누적 분포 함수(empirical cumulative distribution
3038 :     function)를 그려 ë³¼ 수 있습니다.
3039 :     <a name="index-ecdf"></a>
3040 :     <a name="index-Empirical-CDFs"></a>
3041 :     </p>
3042 :     <div class="example">
3043 :     <pre class="example">&gt; plot(ecdf(eruptions), do.points=FALSE, verticals=TRUE)
3044 :     </pre></div>
3045 :    
3046 :     <p>이 분포는 표준정규분포와는 많은 차이가 있음을 명백히 알 수 있습니다. 하지만, 화산폭발이 3분이상 지속될 경우에 대한 분포는 어떨까요?
3047 :     3분이상의 데이터으로부터의 생성된 누적분포를 만들어 본뒤 ê·¸ 위에 정규분포와 겹쳐봄으로서 비교해봅니다.
3048 :     </p>
3049 :     <div class="example">
3050 :     <pre class="example">&gt; long &lt;- eruptions[eruptions &gt; 3]
3051 :     &gt; plot(ecdf(long), do.points=FALSE, verticals=TRUE)
3052 :     &gt; x &lt;- seq(3, 5.4, 0.01)
3053 :     &gt; lines(x, pnorm(x, mean=mean(long), sd=sqrt(var(long))), lty=3)
3054 :     </pre></div>
3055 :    
3056 :     <img src="images/ecdf.png" alt="images/ecdf">
3057 :    
3058 :     <p>Q-Q 플랏을 이용하여 화산폭발 3분이상의 데이터에 대한 정규성을 검토해보는 것도 도움이 됩니다.
3059 :     <a name="index-Quantile_002dquantile-plots"></a>
3060 :     <a name="index-qqnorm"></a>
3061 :     <a name="index-qqline"></a>
3062 :     </p>
3063 :     <div class="example">
3064 :     <pre class="example">par(pty=&quot;s&quot;) # arrange for a square figure region
3065 :     qqnorm(long); qqline(long)
3066 :     </pre></div>
3067 :    
3068 :     <p>Q-Q 플랏으로부터 오른쪽 꼬리 부분이 생각보다 짧은 것을 제외하고는 정규분포를 대체적으로 따르는 것 같습니다. 그럼
3069 :     <code>t</code>-분포함수로부터 생성된 난수의 분포와는 어떤 관계를 가질지 비교해 보십시오.
3070 :     </p>
3071 :     <img src="images/QQ.png" alt="images/QQ">
3072 :    
3073 :     <div class="example">
3074 :     <pre class="example">x &lt;- rt(250, df = 5)
3075 :     qqnorm(x); qqline(x)
3076 :     </pre></div>
3077 :    
3078 :     <p><code>t</code>-분포로부터 얻어진 난수의 분포가 정규분포의 꼬리보다 길다는 것을 알 수 있습니다. 우리는 다음과 같은 방법으로 생성된
3079 :     분포에 대한 Q-Q plot을 만들어 ë³¼ 수 있습니다.
3080 :     </p>
3081 :     <div class="example">
3082 :     <pre class="example">qqplot(qt(ppoints(250), df = 5), x, xlab = &quot;Q-Q plot for t dsn&quot;)
3083 :     qqline(x)
3084 :     </pre></div>
3085 :    
3086 :     <p>마지막으로 정규성과 얼마나 따르는지를 확인하는 테스트를 수행하고자 할 것입니다. R은 아래와 같은 Shpiro-Wilk 테스트를
3087 :     제공합니다.
3088 :     <a name="index-Shapiro_002dWilk-test"></a>
3089 :     <a name="index-shapiro_002etest"></a>
3090 :     </p>
3091 :     <div class="example">
3092 :     <pre class="example">&gt; shapiro.test(long)
3093 :    
3094 :     Shpiro-Wilk 테스트 외에도 Kolmogorov-Smirnov 테스트를 이용하여 정규성을 확인해 ë³¼ 수 있습니다.data: long
3095 :     W = 0.9793, p-value = 0.01052
3096 :     </pre></div>
3097 :    
3098 :     <p>and the Kolmogorov-Smirnov test
3099 :     <a name="index-Kolmogorov_002dSmirnov-test"></a>
3100 :     <a name="index-ks_002etest"></a>
3101 :     </p>
3102 :     <div class="example">
3103 :     <pre class="example">&gt; ks.test(long, &quot;pnorm&quot;, mean = mean(long), sd = sqrt(var(long)))
3104 :    
3105 :     One-sample Kolmogorov-Smirnov test
3106 :    
3107 :     data: long
3108 :     D = 0.0661, p-value = 0.4284
3109 :     alternative hypothesis: two.sided
3110 :     </pre></div>
3111 :    
3112 :     <p>(여기에서는 우리가 같은 표본으로부터 정규분포의 모수를 추정해왔던 것과 같은 분포 이론은 적용되지 않음에 유의하십시오.)
3113 :     </p>
3114 :     <hr>
3115 : gnustats 1252 <a name="g_t_00ec_009d_00bc_00ed_0091_009c_00eb_00b3_00b8_00ea_00b3_00bc-_00ec_009d_00b4_00ed_0091_009c_00eb_00b3_00b8-_00ea_00b2_0080_00ec-_0095"></a>
3116 :     <a name="i1_002f4ie3_002ce31_002f4-i_0027ie3_002c-e2i-"></a>
3117 :     <h3 class="section">8.3 일표본과 이표본 검정</h3>
3118 :     <a name="index-i1_002f4ie3_002ce31_002f4-i_0027ie3_002c-e2i-"></a>
3119 : gnustats 1203
3120 :     <p>지금까지 하나의 표본을 정규분포와 비교해 보았습니다. 두 개의 샘플을 비교하고자 한다면 더 많은 작업이 요구될 것입니다. R에서는
3121 :     다음 예제에 사용되는 통계적 테스트를 포함하여 모든 전형적인 테스트들을 <strong>stats</strong> 패키지에 넣어두었습니다.
3122 :     </p>
3123 :     <p>1995년에 Rice가 the latent heat of the fusion of ice (<em>cal/gm</em>)에 대해서 연구한
3124 :     논문의 490 쪽에 게재된 내용을 고려해 보시기 바랍니다. 다음 두 개의 데이터셋이 이용되었습니다.
3125 :     </p>
3126 :     <div class="example">
3127 :     <pre class="example">Method A: 79.98 80.04 80.02 80.04 80.03 80.03 80.04 79.97
3128 :     80.05 80.03 80.02 80.00 80.02
3129 :     Method B: 80.02 79.94 79.98 79.97 79.97 80.03 79.95 79.97
3130 :     </pre></div>
3131 :    
3132 :     <p>박스플랏(boxplot)은 두 개의 샘플에 대하여 간단한 시각적 비교를 제공합니다.
3133 :     </p>
3134 :     <div class="example">
3135 :     <pre class="example">A &lt;- scan()
3136 :     79.98 80.04 80.02 80.04 80.03 80.03 80.04 79.97
3137 :     80.05 80.03 80.02 80.00 80.02
3138 :    
3139 :     B &lt;- scan()
3140 :     80.02 79.94 79.98 79.97 79.97 80.03 79.95 79.97
3141 :    
3142 :     boxplot(A, B)
3143 :     </pre></div>
3144 :     <a name="index-boxplot"></a>
3145 :     <a name="index-Box-plots"></a>
3146 :    
3147 :     <p>첫번째 그룹이 두번째 그룹보다 더 높은 결과를 보여주는 것같습니다.
3148 :     </p>
3149 :     <img src="images/ice.png" alt="images/ice">
3150 :    
3151 :     <p>각각의 데이터의 평균이 같은지를 테스트하기 위해서 아래와 같이 <em>unpaired</em> <em>t</em>-테스트를 수행해 봅니다.
3152 :     <a name="index-Student_0027s-t-test"></a>
3153 :     <a name="index-t_002etest"></a>
3154 :     </p>
3155 :     <div class="example">
3156 :     <pre class="example">&gt; t.test(A, B)
3157 :    
3158 :     Welch Two Sample t-test
3159 :    
3160 :     data: A and B
3161 :     t = 3.2499, df = 12.027, p-value = 0.00694
3162 :     alternative hypothesis: true difference in means is not equal to 0
3163 :     95 percent confidence interval:
3164 :     0.01385526 0.07018320
3165 :     sample estimates:
3166 :     mean of x mean of y
3167 :     80.02077 79.97875
3168 :     </pre></div>
3169 :    
3170 :     <p>테스트의 결과는 평균의 차이가 정규분포를 따른다고 가정할때 통계적으로 의미가 있음을 나타내고 있습니다. 여기에서 한가지 알아야 할 점은
3171 :     R은 기본적으로 두 데이터의 분산이 같다고 가정하지 않는다는 것입니다. 이것은 <small>S-PLUS</small>에서 제공하는
3172 :     <code>t.test</code>와 동일합니다. 따라서 두 데이터의 분산이 같은지에 대해서 F-테스트를 시행해 보아야 할 것입니다. 이 때, 두
3173 :     데이터는 정규분포로부터 얻어진 샘플이라고 가정합니다.
3174 :     </p>
3175 :     <div class="example">
3176 :     <pre class="example">&gt; var.test(A, B)
3177 :    
3178 :     F test to compare two variances
3179 :    
3180 :     data: A and B
3181 :     F = 0.5837, num df = 12, denom df = 7, p-value = 0.3938
3182 :     alternative hypothesis: true ratio of variances is not equal to 1
3183 :     95 percent confidence interval:
3184 :     0.1251097 2.1052687
3185 :     sample estimates:
3186 :     ratio of variances
3187 :     0.5837405
3188 :     </pre></div>
3189 :     <a name="index-var_002etest"></a>
3190 :    
3191 :     <p>테스트의 결과는 두 데이터의 분산은 통계적으로 차이가 없음을 의미하므로, 두 데이터의 분산이 같다고 가정하는 전형적인 t-테스트를
3192 :     사용해도 무방합니다.
3193 :     </p>
3194 :     <div class="example">
3195 :     <pre class="example">&gt; t.test(A, B, var.equal=TRUE)
3196 :    
3197 :     Two Sample t-test
3198 :    
3199 :     data: A and B
3200 :     t = 3.4722, df = 19, p-value = 0.002551
3201 :     alternative hypothesis: true difference in means is not equal to 0
3202 :     95 percent confidence interval:
3203 :     0.01669058 0.06734788
3204 :     sample estimates:
3205 :     mean of x mean of y
3206 :     80.02077 79.97875
3207 :     </pre></div>
3208 :    
3209 :     <p>모든 테스트들이 두 데이터가 정규분포로부터 얻어진 샘플임을 가정하고 있으나, two-sample Wilcoxon 혹은
3210 :     Mann-Whitney 테스트에 필요한 가정은 분포가 단순히 연속형이어야 한다는 것입니다.
3211 :     </p>
3212 :     <a name="index-Wilcoxon-test"></a>
3213 :     <a name="index-wilcox_002etest"></a>
3214 :     <div class="example">
3215 :     <pre class="example">&gt; wilcox.test(A, B)
3216 :    
3217 :     Wilcoxon rank sum test with continuity correction
3218 :    
3219 :     data: A and B
3220 :     W = 89, p-value = 0.007497
3221 :     alternative hypothesis: true location shift is not equal to 0
3222 :    
3223 :     Warning message:
3224 :     Cannot compute exact p-value with ties in: wilcox.test(A, B)
3225 :     </pre></div>
3226 :    
3227 :     <p>테스트를 수행한 결과에 경고가 있음을 알 수 있습니다. 이것은 아마도 각각의 샘플안에 동일한 값을 가지는 데이터들이 존재하기
3228 :     때문일것입니다. 따라서 연속형 분포를 가정하기 보다는 데이터가 이산형분포로부터 나왔다고 생각하는게 올바를 것입니다(혹은 이것은
3229 :     rounding 으로부터 나온 결과일 수 도 있습니다).
3230 :     </p>
3231 :     <p>두 개의 샘플을 시각적으로 비교해 보는데 여러가지 방법이 있을 수 있습니다. ê·¸ 중에서 두 개의 박스플랏을 동시에 비교해보는 것은 이미
3232 :     해 보았습니다.
3233 :     </p>
3234 :     <div class="example">
3235 :     <pre class="example">&gt; plot(ecdf(A), do.points=FALSE, verticals=TRUE, xlim=range(A, B))
3236 :     &gt; plot(ecdf(B), do.points=FALSE, verticals=TRUE, add=TRUE)
3237 :     </pre></div>
3238 :    
3239 :     <p>위에서 사용된 코드는 두개의 emprical CDFs (누적확률분포)를 비교할 것입니다. 또한 <code>qqplot</code> 함수를 이용하여
3240 :     두 개의 샘플에 대한 Q-Q 플랏을 생성할 수도 있습니다. 아래의 코드는 일반 연속 분포를 가정하여 두 개의 <code>ecdf</code>의
3241 :     최대수직거리차이(the maximal vertical distance)에 대하여 Kolmogorov-Smirnov 테스트를 수행합니다.
3242 :     </p>
3243 :     <div class="example">
3244 :     <pre class="example">&gt; ks.test(A, B)
3245 :    
3246 :     Two-sample Kolmogorov-Smirnov test
3247 :    
3248 :     data: A and B
3249 :     D = 0.5962, p-value = 0.05919
3250 :     alternative hypothesis: two-sided
3251 :    
3252 :     Warning message:
3253 :     cannot compute correct p-values with ties in: ks.test(A, B)
3254 :     </pre></div>
3255 :    
3256 :     <hr>
3257 : gnustats 1244 <a name="Loops-and-conditional-execution-_0028_00eb_00b0_0098_00eb_00b3_00b5-_00eb_00b0_008f-_00ec_00a1_00b0_00ea_00b1_00b4_00eb_00b6_0080-_00ec_008b_00a4_00ed_0096_0089_0029"></a>
3258 : gnustats 1252 <a name="e_002a_002ce_00a31i_002c-e_00b0e3ue_0021_002c_002c-e_002a_002ce_007c_0021e3-i_00a1_00b0e_002b_002d_0027eP-i_0024_003fi"></a>
3259 :     <h2 class="chapter">9 그룹화, 반복문, 그리고 조건부 실행</h2>
3260 : gnustats 1244 <a name="index-Loops-and-conditional-execution-_0028e_00b0e3u-e_00b0-i_00a1_00b0e_002b_002d_0027eP-i_0024_003fi_0029"></a>
3261 : gnustats 1203
3262 :    
3263 :     <hr>
3264 : gnustats 1252 <a name="g_t_00ea_00b7_00b8_00eb_00a3_00b9_00ed_0099_0094_00eb_0090_009c-_00ed_0091_009c_00ed_0098_0084"></a>
3265 :     <a name="e_002a_002ce_00a31ie-ii"></a>
3266 :     <h3 class="section">9.1 그룹화된 표현</h3>
3267 :     <a name="index-e_002a_002ce_00a31ie-ii"></a>
3268 : gnustats 1203
3269 :     <p>R은 명령어 형식으로 결과값을 반환하는 함수 또는 표현을 사용하는 점에서 표현언어(expression
3270 :     language)입니다.결과값를 재사용할 수 있도록 표현식에 할당하며, 이 표현식을 어느 곳에서든지 재사용할수도 있고 다중할당도
3271 :     가능합니다.
3272 :     </p>
3273 :     <p>또한, <code>{<var>expr_1</var>; <var>&hellip;</var>; <var>expr_m</var>}</code>와 같이 여러개의 명령들을 중괄호로
3274 :     한데 묶어 이것을 또한 표현식으로도 사용할 수 있습니다. 이렇게 중괄호로 묶은 것을 그룹화된 표현식이라고 하고, 이것의 결과는 그룹내의
3275 :     맨 마지막 명령문이 실행되었을때 얻어지게 됩니다. 이렇게 그룹화된 표현식 역시 더 큰 표현식의 일부분으로도 사용될 수 있습니다.
3276 :     </p>
3277 :     <hr>
3278 : gnustats 1252 <a name="g_t_00ec-_009c_00ec_0096_00b4_00eb_00ac_00b8"></a>
3279 :     <a name="i-i_0027e_0021_002c"></a>
3280 :     <h3 class="section">9.2 제어문</h3>
3281 :     <a name="index-i-i_0027e_0021_002c"></a>
3282 : gnustats 1203
3283 :    
3284 :     <hr>
3285 :     <a name="Conditional-execution"></a>
3286 : gnustats 1252 <a name="i_00a1_00b0e_002b_002d_0027eP-i_0024_003fi_003a-if-e_0021_002c"></a>
3287 :     <h4 class="subsection">9.2.1 조건부 실행: <code>if</code> 문</h4>
3288 : gnustats 1203 <a name="index-if"></a>
3289 :    
3290 :     <p>조건문은 아래와 같은 형식을 가집니다.
3291 :     </p>
3292 :     <div class="example">
3293 :     <pre class="example">&gt; if (<var>expr_1</var>) <var>expr_2</var> else <var>expr_3</var>
3294 :     </pre></div>
3295 :     <a name="index-if-1"></a>
3296 :     <a name="index-else"></a>
3297 :    
3298 :     <p><var>expr_1</var>은 반드시 ì°¸ 혹은 거짓이라는 단 하나의 논리형 값을 가져야만 합니다.
3299 :     </p>
3300 :     <a name="index-_0026_0026"></a>
3301 :     <a name="index-_007c_007c"></a>
3302 :     <p><code>&amp;&amp;</code>와 <code>||</code>는 종종 <code>if</code>이라는 조건문과 함께 쓰이는 &ldquo;short-circuit&rdquo;
3303 :     연산자입니다.<code>&amp;</code>와 <code>|</code>가 벡터내 구성요소 단위의 연산을 수행하는 반면, <code>&amp;&amp;</code>와 <code>||</code>는
3304 :     길이가 1인 벡터들에만 적용되고 필요한 경우 그것의 두 번째 인자만 평가합니다(evaluate).
3305 :     </p>
3306 :     <a name="index-ifelse"></a>
3307 :     <p>R은 벡터라이즈(vectorized)된 버전의 <code>if</code>/<code>else</code> 조건문인 <code>ifelse</code> 함수를
3308 :     제공하고 있습니다. 이것은 <code>ifelse(condition, a, b)</code>의 형식을 가지고 만약
3309 :     <code>condition[i]</code> 이 참이면 <code>a[i]</code>를, 거짓이면 <code>b[i]</code>를 결과값으로 가지게 됩니다.
3310 :     </p>
3311 :    
3312 :     <hr>
3313 :     <a name="Repetitive-execution"></a>
3314 : gnustats 1252 <a name="e_00b0e3ui--i_0024_003fi_003a-foreY_003d1_002f4-i_0027i_00a9i-e_00b0e3u_002c-repeat-e_002a_002ce_007c_0021e3-while"></a>
3315 :     <h4 class="subsection">9.2.2 반복적 실행: <code>for</code>를 이용한 반복, <code>repeat</code> 그리고 <code>while</code></h4>
3316 : gnustats 1203 <a name="index-for"></a>
3317 :    
3318 :     <p>다음은 <code>for</code> 루프를 이용한 반복문에 대한 형식입니다.
3319 :     </p>
3320 :     <div class="example">
3321 :     <pre class="example">&gt; for (<code><var>name</var></code> in <var>expr_1</var>) <var>expr_2</var>
3322 :     </pre></div>
3323 :    
3324 :     <p><code><var>name</var></code>은 루프(loop) 변수입니다. <var>expr_1</var>은 흔히 <code>1:20</code>ê³¼ 같이 사용되는 계열로
3325 :     벡터표현식이고 <var>expr_2</var>는 더미(dummy) <em>name</em>의 방법으로 씌여진
3326 :     하위표현식(sub-expressions)ê³¼ 함께 그룹화된 표현식인 경우가 종종 있습니다. <var>expr_2</var>는
3327 :     <var>expr_1</var>의 벡터결과에서의 값을 통해 <var>name</var> 처럼 반복적으로 평가됩니다(evaluated).
3328 :     </p>
3329 :     <p>예를들어, 만약 <code>ind</code>가 그룹멤버쉽을 나타낸다면, 각 그룹별로 <code>y</code>와 <code>x</code>의 관계를 살펴 ë³¼ 수 있는
3330 :     플랏(plot)을 생성하고자 하는 경우를 가정해 봅니다.이를 수행하기 위한 한가지 옵션은 어떤 특정 요인이 가지고 있는 수준별로 플랏을
3331 : gnustats 1220 생성해주는 함수 <code>coplot()</code> <a name="DOCF19" href="#FOOT19"><sup>19</sup></a> 을 이용하는 것입니다. 또 다른 방법으로는 아래와 같이 하는 것입니다.
3332 : gnustats 1203 </p>
3333 :     <div class="example">
3334 :     <pre class="example">&gt; xc &lt;- split(x, ind)
3335 :     &gt; yc &lt;- split(y, ind)
3336 :     &gt; for (i in 1:length(yc)) {