출처 : 인공지능과 딥러닝 

저자 : 마쓰오 유타카

미래를 보다 정확하게 예측하고 준비해 두는것은 매우 중요하다.

앞으로 여러분의 업무나 생활에조금이라도 도움이 되기를 바란다, 어쩌면 인공지능의 전체적인 것을 이해하는것은 조금 긴여행이 될지도 모르지만 꼭 끝까지 읽었으면 한다.

미래에우리들의 생활 깊숙이 침투해오는 인공지능의 전체적인 모습을, 지금 이 순간 움켜쥐면 그 지식은 반드시 가까운 미래인 5년, 10년의 나침반이 될 것이다. 그리고 이책을 끝까지 다읽을 즈음에는 인공지능에 대한 당신의 접근 방법이 보다 깊이 있고, 보다 세련된것으로 바뀌고 있을 것이다.

시작은 긴여행의 첫걸음으로 인공지능은 아직 미완성이다 라는 사실에서부터 시작해보자.


인공지능이란 무엇인가?

전문가들의 견해

인공지능 연구하는 사람들이 많은 가운데 그들은 과연 어떻게 생각하는가 알아보자. 인공지능이란 연구분야는 일반적으로 여겨지는 것보다도 좀 더 학술적인 분위기 혹은 진리의 추구 색조가 강하다.

1. 인공적으로 만들어진 지능을 가지는 실체. 또는 그것을 만들자고 함으로써 지능 자체를 연구하는 분야다.

2. 지능을 메커니즘 내지는 마음을 가지는 메커니즘이다.

3. 인공적으로 만든 지적인 행동을 하는물건(시스템)이다.

4. 인간의 두뇌 활동을 극한까지 모사하는 시스템이다.

5. 인공적으로 만든 새로운 지능의 세계이다.

6. 지능의 정의가 명확하지 않음으로 인공지능을 명확히 정의 할 수 없다.

7. 궁극에는 인간과 구별되지 않는 인공적인 지능

8. 인공적으로 만들어진지능을 가지는 실체. 또는 그것을 만들자고 함으로써 지능 자체를 연구하는 분야이다.

9. 사람의 지적인 행동을 모방, 지원, 초월하기 위한 구성적 시스템

10. 공학적으로 만들어지는 지능이지만, 그 지능의 수준은 사람을 뛰어넘고 있는 것을 상상하고 있다.

11. 계산기 지능 가운데 인간이 직.간접적으로 설계할 경우를 인공지능이라고 불러도 좋지 않을까 생각한다.

12. 인공적으로 만들어진 인간과 같은 지능 또는 그것을 만드는 기술.


인공지능에 대한 세상의 견해

인공지능으로 유명한 교과서인 스튜어트 러셀의 '에이전트 어프로치'에서는 인공지능을 포착하고 현명하게 행동하기 위한 인공지능의 다양한 방법들을 설명하고 있다.

1단계에서 부터 4단계 까지 구분이 가능하며


1레벨 단순한 제어 프로그램을 '인공지능'이라고 칭하고 있다.

레벨1은 마케팅적으로 '인공지능' 즉 'AI'라고 지칭하는 것이며, 지극히 단순한 제어 프로그램을 탑재하고 있는 전자제품을 인공지능 탑재 라고 부르는 경우에 해당한다.

에어컨이나 청소기, 세탁기 최근에는 전동 전기면도기까지 세상에는 인공지능을 자칭하는 상품이 넘쳐나고 있다. 이러한 기술은 제어공학이나 시스템공학이라는 이름으로 이미 역사가 긴 학문 분야이며, 이러한 것을 인공 지능이라 칭하는것은 그 분야의 연구자나 기술에도 어느정도 실례가 된다고 생각한다. 가전제품의 '인공지능 탑재'들을 레벨 1의 인공지능이라고 부르기로 한다.


2레벨 고전적인 인공지능

레벨 2는 행동의 패턴이 지극히 다채로운 경우에서의 지능을 말한다. 장기 프로그램이나 청소로봇 혹은 질문에 대답하는 인공지능 등이 이에 해당한다.  이것은 소위 고전적인공지능이라 일컬으며 입력과 출력 관계를 맺는 방법이 세련 되어 입력과 출력의 조합수가 극단적으로 많은 경우를 주로 일컫는다. 이때 인공지능을 적절한 판단을 내리기위해 추론/탐색을 하거나, 기존에 보유한 지식 베이스를 기반으로 판단하기도 한다. 고전적인 퍼즐을 푸는 프로그램이나 진단 프로그램이 여기에 해당된다.


3레벨 기계학습을 받아들인 인공지능

레벨3은 검색 엔진에 내장되어 있거나 빅데이터를 바탕으로 자동적으로 판단하는 인공지능이다. 추론의 구조나 지식 베이스가 데이터를 바탕으로 학습되는 것으로 전형적으로 기계학습의 알고리즘이 이용되는 경우가 많다. 기계 학습이라는 것은 표본이 되는 데이터를 바탕으로 규칙이나 지식을 스스로 학습하는 것이다. 이 기술은 패턴인식이라는 과거로부터의 연구를 기초로 1990년대부터 지행되어 2000년대에 들어와 빅데이터 시대를 맞이하면서 더욱 진화 하고 있다. 최근의 인공지능은 이 레벨 3을 일컫는 경우가 많다. 과거에는 레벨2였던 것도 기계학습을 받아들여 레벨 3으로 올라오고 있는 것이 현재 모습이다.


4레벨 딥러닝을 받아들인 인공지능

그 위의 단계인 레벨 4로 기계학습을 할 때의 데이터를 나타내기 위해서 사용되는 입력값(특징 이라고 불린다.) 자체를 학습하는것이 있다. 제 6장에서 소개하는 딥러닝이 여기에 해당한다. 이책에서는 '특징표현 학습'이라고 부른다.

서두에서도 다루었듯이 미국에서는 딥러닝 관련 분야의 투자 경쟁-기술 개발 경쟁 -인재 획득 경쟁의 치열함이 극에 달하고 있고, 지금 가장 뜨거운 영역이기도 하다.

'Artificial Intelligence > Deep Learning' 카테고리의 다른 글

딥러닝 다계층  (0) 2016.01.22
딥러닝  (0) 2016.01.22
뉴럴 네트워크  (0) 2016.01.21
기계 학습  (0) 2016.01.21
인공지능 발전 역사  (0) 2016.01.21
Posted by MIDDLE
,

/**


 * 예제 :

 *   var data = new Map();

 *   data.put("key1", "value1");

 *   data.put("key2", "value2");

 *   data.get("key1");

 *   data.size();

 *   

 */

  

Map = function(){

this.map = new Object();

};

Map.prototype = {   

put : function(key, value){   

/*if ( value.constructor == Array ){

for ( var i =0 ; i < value.size(); i++ ) {

 this.map[key] = value[i];

 alert(i + key + " : " + value[i]);

}

alert('This is an array!' + value.legnth);

}else{*/

this.map[key] = value;

/*}*/

},   

get : function(key){   

return this.map[key];

},

containsKey : function(key){    

return key in this.map;

},

containsValue : function(value){    

for(var prop in this.map){

if(this.map[prop] == value) return true;

}

return false;

},

isEmpty : function(key){    

return (this.size() == 0);

},

clear : function(){   

for(var prop in this.map){

delete this.map[prop];

}

},

remove : function(key){    

delete this.map[key];

},

keys : function(){   

/*var keys = new Array();   

for(var prop in this.map){   

keys.push(prop);

}   

return keys;*/

var keys = new Array();

var resVal = "";

var count = 0;

for(var prop in this.map){   

keys.push(prop);

if(count > 0){

resVal += "_";

}

resVal += prop;

count++;

}   

return resVal;

},

values : function(){   

/*var values = new Array();   

for(var prop in this.map){   

values.push(this.map[prop]);

}   

return values;*/

var values = new Array();

var resVal = "";

var count = 0;

for(var prop in this.map){   

values.push(prop);

if(count > 0){

resVal += "_";

}

resVal += this.map[prop];

count++;

}   

return resVal;

},

size : function(){

var count = 0;

for (var prop in this.map) {

count++;

}

return count;

}

};

 

 


Key와 Values는 _ 를 이용하여 구분자를 사용하였다. JavaScript Taraditional을 사용하게 될경우 배열의 형태가 깨질 우려가 있기 때문에 배열의 구분자는 사용하지 않아야 한다.

  



Ajax 보내는 부분에서 data 불러오기

function _fnCallJson(reqURL, data, async, callback) {

// 처리시는 동기화

$.ajaxSetup({

async : false

});

var args = "";

// callback 함수가 null일시에 값만 return 해준다.

var _response;

var defaultAsync = false;

var resDataType = "json";

if (data != null && data.size() > 0) {

var keys = data.keys().toString().split('_');

var values = data.values().toString().split('_');

alert("_fnCallJson Key :  " + data.keys().toString() + " val :  "+  data.values().toString());

for (var i = 0; i < keys.length; i++) {

if (i > 0)

args += "&";

if (keys[i].length > 0)

args += keys[i] + "=" + values[i];

}

}

if (callback != null ){

}

//else{

// resDataType = "html";

//}

var resAsync = "";

if (async != null && async.length > 0) {

resAsync = async;

} else {

resAsync = defaultAsync;

}

$.ajax({

type : "POST",

url : reqURL,

data : args,

async : resAsync,

traditional : true,

contentType : "application/x-www-form-urlencoded; charset=utf-8",

dataType : resDataType, // xml, html, json, jsonp, script, text

success : function(data) {

if (callback != null ) {

callback(data);

}else{

//_response = $.parseJSON(data);

_response = data;

}

}

});

return _response;

// 처리시는 동기화

$.ajaxSetup({

async : false

});

}

Posted by MIDDLE
,
  • Tomcat 서버를 sh shutdown.sh 명령어를 통해 Shutdown 한 후 webapps 폴더 내부에서 모든 파일을 삭제를 한다. 올리고자하는 WAR파일명을 ROOT.war로 변경한뒤 폴더에 업로드 후 bin 폴더의 sh startup.sh 명령어로 실행한다.

  • Leave your war file in $CATALINA_BASE/webapps under its original name. Turn off autoDeployand deployOnStartup in your Host element in the server.xml file. Explicitly define all application Contexts in server.xml, specifying both the path and docBase attributes. You must do this because you have disabled all the Tomcat auto-deploy mechanisms, and Tomcat will not deploy your applications anymore unless it finds their Context in the server.xml.

    second method: in order to make any change to any application, you will have to stop and restart Tomcat.

  • $CATALINA_BASE/webapps 에 고유 이름이 있다면 Ex) webapps/project. shutdown 완료 이후 conf 폴더 내부의 server.xml 파일을 확인 이후 docBase를 추가한다.
    docBase추가 방법은

    <Host name="localhost"  appBase="webapps"

                unpackWARs="true" autoDeploy="true">


            <!-- SingleSignOn valve, share authentication between web applications

                 Documentation at: /docs/config/valve.html -->

            <!--

            <Valve className="org.apache.catalina.authenticator.SingleSignOn" />

            -->


            <!-- Access log processes all example.

                 Documentation at: /docs/config/valve.html

                 Note: The pattern used is equivalent to using pattern="common" -->

          <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

                   prefix="localhost_access_log." suffix=".txt"

                   pattern="%h %l %u %t &quot;%r&quot; %s %b" />

            <Context docBase="project" path="" reloadable="true" />

    </Host>

아래의 한줄을 Server.xml 에 추가를 하면 해결된다.

Posted by MIDDLE
,

Arugument 44

GRE 2015. 11. 5. 09:06

In this argument, the speaker concludes that Forsyhe citizens have adopted healthier lifestyles. To justify this conclusion the seaker cites a recent survey of Forsythe citizens suggesting that their eating habits now conform more closely to government nutritional recommendations than they did ten years ago. The speaker also points out that sales of kiran, a substance known to reduce choleterol, have increased fourfold, while sales of sulia, which few of Forsythe's healthiest citizens eat regularly, have been declining. This argument is unpersuasive for several reasons.


First, the surbey must be shown to be reliable before Ican accept any conclusions based upon it. Specifically, the responses must be accurate, and the respondents must be statiscally significant in number and representative of the overall Forsthe  citizenry in terms 

Posted by MIDDLE
,

시계열분석

Data Science/R 2015. 9. 25. 09:47

참조 

TimeSeriesAnalysis.pdf

시계열 분석


시계열 데이터느 시간에서 순차적으로 관측한 값들의 집합


그럼, Q.Discretize 하는 방법

-1) Continuous time series 로 샘플링

-1) 특정 기간 동안의 값들을 합치기


특징

- Time periods 는 equal length

- missing values 가없다.


Q. Missing Value가 있으면 어떻게 처리?

- Expectation-maximization 방법으로 처리 (Missing Value를 모형을 통해 예측)

- 이부 데이터만 Missing 한경우 가능하다.


시계열 데이터는 2가지로 나뉜다.



               랜덤요소  (Arima, Arch 모형등)

시계열 데이터


트랜드 패턴 ( 다양한 통계 모형 적용)

                          시즈널 패턴 (ACF, Fourier 방법 적용)

               패턴요소  주기 패턴   (ACF, Fourier 방법 적용)

                      기타 통계적 패턴 ( 데이터 마이닝 기법 적용: 의사결정 나무,SVM등)




사용영역

기술적

- 시계열 사이 관계 분석

- 프로세스 관리/표현 방법

- 예측


영역

- 경제학; 비즈니스 계획; 수요계획

- 재고 및 생산관리

- 산업 프로세스 관리 및 최적화

  센서 시그널 분석을 통한 지능화 모니터링


시계열 데이터 분석 접근 방법 2가지

자체 추정방법

장정 : 최소의 데이터로 빨리,쉽게 분석 주로 Short-term 예측에 이용 다른 분석의 초기분석으로 이용

단점 : Long-term 예측에 어려움 외부요소 고려하지 못함


원인 결과 방법

장점 : 많은 정보 이용 Mid-term 예측 가능

단점 : 복잡한 과정 필요



Self-Prjecting의 Classical 방법 PDF 참조

자기 산관계수를 통해서 통계적으로 알수 있음 항상, 가능하면 비주올 plot을 하는것이 좋다.

1차 트랜드가 아니라 다른차수 트랜드 이면? (일반적 트랜드를 어떻게 해결?)

여러가지 Smothing 방법이 있다.


자기상관계수 : X,Y의 선형적 관계의 정도

  자체 시계열 데이터내에서 얼마나 선형적 연관성이 있는가 

  lag k의 의미? zt와 k 만큼 shift시킨 zt-k 사이의 연관성



Global Temperature 데이터의 Autocorrelation  Function(ACF)

1. Original signal Xt : 빨리 








'Data Science > R' 카테고리의 다른 글

R 도움말 & 함수 확인  (0) 2015.09.10
R공부 Example 3회차  (0) 2015.09.08
R 공부 1회차 Example  (0) 2015.08.31
Posted by MIDDLE
,


오픈스택 구석구석 파헤치기.pdf



출처는 어디인지 까먹음...

Posted by MIDDLE
,

R에서 도움말 사용법


help(log) = ?log  #log 도움말

args(log) # 함수의 인자를 알고자 할때


그러나 for문등 특수문자에 대해서는 ""로 감싸줘야 한다.

help("for")  #for에 대한 도움말 보고싶을때 사용

help.search("solve") #solve에 포함된 함수 검색을 검색할때 사용

example(solve) #예제만 보고싶을때 사용

par(ask=TRUE) #여러개 결과물이 한번에 출력될때 하나씩 볼수 있도록 지원



함수의 정의 확인

mean 등 함수의 이름을 치는 것으로 일부 함수는 확인 할 수 있지만, methods() 사용해서 목록 표시가능하다.

함수 내부의 식을 보고싶을 경우

mean.default # .default를 뒤에 붙여준다.


'Data Science > R' 카테고리의 다른 글

시계열분석  (0) 2015.09.25
R공부 Example 3회차  (0) 2015.09.08
R 공부 1회차 Example  (0) 2015.08.31
Posted by MIDDLE
,



Posted by MIDDLE
,

데이터 분석의 흐름


1.    데이터를 R로 읽어 들인다.

2.    읽어 들인 데이터를 플룻 한다.

3.    읽어 들인 데이터의 통계량을 구한다.

1은 함수 c()를 이용해서 데이터를 벡터로 간단히 읽어 들일 수 있다. 2는 데이터의 특징을 파악한다는 의미에서 중요하고, 그래픽 기능이 뛰어난 R이라면 간단히 처리할 수 있다. 3은 한 그룹이상의 데이터를 추정하고 검정하며, 데이터로부터 모델식을 작성하고 그 모델에 대해 회귀분석등을 한다. 여기서는 T검정과 직선 회귀, 최소 제곱법을 시행하는 방법을 소개한다.


여섯명에게 밀가루(약이라 생각하고 먹게함)를 다른 여섯명에게는 다이어트 약을 1개월간 복용한 후 체중의 변화량을 측정한 데이터이다.


흥미있는 것은 체중의 변화다. 우선밀가루 복용그룹과 다이어트 복용 그룹의 12명 전원의 체중 변화데이터를 읽어들인다.

1과정 수행

flour <- c(3, -2, -1 ,0 ,1, -2)

diet <- c(-4, 1, -3, -5, -2, -8)

total <- c(flour, diet)


2과정 데이터를 플롯한다.

#데이터를 플롯한다.

hist(total)

#히스토그램끼리 겹치기는 힘드므로 히스토그램을 선으로그린 밀도추정곡선으로 그룹 비교한다.

plot(density(flour), xlim=c(-8,8),ylim=c(0,0.2), lty=1, ann=F)

par(new=T)

plot(density(diet), xlim =c(-8,8), ylim=c(0,0.2),lty=2)

legend(4,0.2, c("밀가루", "다이어트약"), lty=1:2, ncol=1)



검정 결과 보는법

t검정을 시행 함수 t.test() 검정결과 출력한다.

주로 > 함수명(데이터를 벡터나 행렬로 지정)

함수명(x) 하나의 표본에 대해 검정할때는 하나의 벡터 X를 지정한다.

함수명(x,y) 두개의 표본에 대해 검정등을 할때는 두개의 벡터 x,y 를 지정한다.

함수명(A) 2x2 분할표나 분산분석표등에 대해 검정을 할때는 표의 성분을 행렬 A로 지정한다.


t.test(x,y=NULL , alternative=c("two.sided", "less", "greater"), mu=0, paired=FALSE, var.equal=FALSE, conf.level=0.95)


t.test(diet , mu=0) # 모평균 mu 가 0인지 검정해서 95%의 신뢰구간을 구한다.


One Sample t-test


data:  diet   #data : diet 검정한 데이터 이름

t = -2.842, df = 5, p-value = 0.03616 #t=-2.842 : t의 값, 이 값이 기각역에 들어가는지 본다. df = 5 : t의 자유도, p-value = 0.03616 : p의 값, 이 값이 0.05보다 작으면 유의차가 있는 것이다. (지금은 유의차가 나왔다.)

alternative hypothesis: true mean is not equal to 0  #alternative hypothesis : 대립가설, 모평균이 0이 아니다.

95 percent confidence interval: 95 % 신뢰 구간. 신뢰구간은 [-6.6657492, -0.3342508]로 되어있다.

 -6.6657492 -0.3342508

sample estimates: #추정값 , 지금은 표본평균을 추정하고 있으며 ,-3.5 로 되어있다.

mean of x 

     -3.5 

'Data Science > R' 카테고리의 다른 글

시계열분석  (0) 2015.09.25
R 도움말 & 함수 확인  (0) 2015.09.10
R 공부 1회차 Example  (0) 2015.08.31
Posted by MIDDLE
,


# f(x) = x^2 + sin(x) 에대해 f'(0)구하라

f <- deriv (~ x^2 + sin(x), "x", func=T)

f(0)


#f(x)= e^(-x^2)에대 0부터1까지 0부터 무한대 적분

f<-function(x) exp(-x^2)

integrate(f,0,1)


#행렬 작성

matrix(1:6, nrow=2, ncol=3)

matrix(1:6, nrow=2, ncol=3 , byrow = T)


#행렬 꺼내기

x <-matrix(1:6, nrow=2, ncol=3 , byrow = T)

x[1, 2] #1 행 2열

x[c(1,2) ,2] #1,2행에서 2열 성분표시

x[2 ,c(1,2)] #2행에서 1,2열 성분표시


#논리 벡터를 이용한 데이터 출력or 미출력

x[-1, c(T,F,T)]


#행렬의 결합

x <- rbind(c(1,2,3), c(4,5,6)) #rowBind

x <- cbind(c(1,2,3) , c(4,5,6)) #colBind


#행렬 계산

a<- matrix(1:4, 2,2) # 22행렬

b<- matrix(0:3, 2,2) # 22행렬


#전치 행렬

t(x)


#제로 행렬

diag(0,3)


#전치 행렬

diag(1:3,4)


#연립 방정식의 해

a <- matrix(c(0,1,2,3,4,5,6,7,9), 3, 3) #     3y + 6z = 1

b<- matrix(c(1,0,-2))                   # x  +4y + 7z = 0

solve(a,b)                              #2x  +5y + 9z =-2


#역행렬 구하기

#A. b=x b에 A의 차수 의 단위 행렬 지정 후 solve()로 풀면 A의 역행렬 구할수 있다.

A <- array(runif(9),c(3,3))

B <- solve(A)#방법1

a <- matrix(c(0,1,3,4),2,2)

b <- matrix(c(1,0,0,1),2,2)

solve(a,b)#방법2


#일반 역행렬

A <- matrix(c(1,2,3,4,5,6,7,8,9),c(3,3))

B <- solve(A)

#Error in solve.default(A) : 

#  Lapack routine dgesv: system is exactly singular: U[3,3] = 0

library(MASS) #library MASS 사용후 ginv(A)로 사용

B<-ginv(A)

B



#크로스 곱

#crossProd() 사용하면 A와 B의 크로스곱 t(A) %*% B 를 구할수 있다.

a<- matrix(c(1,2,3,4))

b<- matrix(c(0,-1,-2,1))

crossprod(a,b)


R에서 행렬이란

행과 열이 있는 2차원 배열을 가르킨다. 일반적으로 말하는 행렬은 각 요소가 수치로된 행렬만 다루지만, R에서의 행렬은 2차원 배열이므로 논리값이나 문자열 등을 요소로 행렬을 만들 수도있다. 따라서 행렬을 만드려면 matrix() 함수를 사용한다고 설명했지만 배열을 생성하는 의미에서는 array()를 사용해도 만들수 있다.



#image()이용 행렬 이미지 그림표시 바둑판 만들기

x <- matrix(rep(0:1, 81),9,9)

image(x, col=c(5,9))



시뮬레이션 

이장의 목적은 R로 간단한 시뮬레이션을 해본다. R에서는 간단하게 프로그램을 작성할 수 있으므로 시뮬레이션 상황만 설정하면 나머지 과정은 간단하며, 쉽게 시뮬레이션 실험을 할 수 있다. 여기서는 다음과 같은 흐름으로 몬테카를로 시뮬레이션을 소개한다.


시뮬레이션이란 모의실험을 의미한다. 실제로 실험 할 수 있을때는 직접해보는 것이 가장 손쉽고 빠르다. 실제로 실험하기에는 시간과 비용이 지나치게 들거나 실험환경을 설정하기 어려울때 결과 예측이 가능하면 실제로 실험을 할 필요가 없지만, 문제가 복잡해서 결과 예측이 곤란할때는 시뮬레이션을 선택할 수있다. 이장에서는 컴퓨터 시뮬레이션에 관해 설명하고, 이것을 시뮬레이션이라고 부르기로한다.


시뮬레이션 순서 

1. 시몰레이션의 목적을 확인하고 상황 설정을 한다.

2. 시뮬레이션을 하기위해 어떻게 하면 좋을지 실제 순서(알고리즘) 결정한다. R에서는 순서가 정해지면 함수를정의 한다.

3. 시뮬레이션 결과를 출력한다.

4. 결과를 정리하고 알아낸 내용을 검토한다.

5. 시뮬레이션 결과 분석에 필요한 통계처리를한다.

R에서는 실험 하는 작업순서를 프로그램 하게된다.

예를들어 동전 한개를 10회던졌을때 앞면이 몇번나오는지를 보기위해 다음순서로 진행한다.

1. 상황설정 : 동전 한개를 10회던진다. -> 동전을 한번던졌을때 앞면은 1/2 확률로 나온다 가정한다.

2. 순서설정 : 동전을 1회던진다 -> 결과를 기록한다. 컴퓨터로 10회 반복한다. R에서는 다음순서로 처리한다.

- 동전을 던진다. = 난수를 발생한다.

- 결과가 앞면이면 앞면이 나온 횟수를 카운트하는 함수를 만든다.

- 동전을 10회던진 후 앞면이 나온횟수를 출력한다.

3. 시뮬레이션 실행 = R함수 실행

4. 함수 실행 결과를 확인 



Posted by MIDDLE
,