전산통계학 1주차 강의 - for, Matrix, rep, seq, SUMMARY, 초기값
코딩 공부/R-전산 통계학 2019. 11. 14. 12:04앞으로 강의 글을 적을 때,
제목 은 다음처럼 적을 것이고 | 명령문 은 다음처럼 적을 것이다 | 설명은 일반 글씨체로 적을 것이다
중요하다 싶은 내용은 중요한내용 처럼 적을 것이다
변수대입
x<-6 ; y<-4
z<-x+y
seq
x<-seq(1,9,by=2)
1부터 9까지 2라는 차이로 수열을 x변수에 대입할 것이다 <=> x={1,3,5,7,9}
rep
rep(0,100) 0을 100번 써라
rep(1:3,6) 1부터 3을 6번 적어라
<문제>
rep(1:3,rep(6,3)) ; rep(1:3,c(6,6,6)) 그렇다면, 이 두개의 명령어는 어떻게 나올까? (의미를 곰곰히 생각해보자)
vector
x<-c(6,8,9) ; y<-c(1,2,4) 다음처럼 벡터를 c( ) 를 사용해서 대입해주고, 간단한 계산을 해보자
x+y
x*y
x+2
<첨언>
명령어로 x[1] 을 입력하면 x벡터의 1번째 원소가 나오게된다
또한 x[4]=10 은 x벡터에 4번째 원소=10이라고 입력시키는 명령어이다
만약 이상태에서 x+y를 입력하게 된다면 x의 4번째 원소는 y의 1번째 원소와 더해진다
또한 x*y 를 하게되면 위와 마찬가지로 x의 4번째 원소는 y의 1번째 원소와 곱해진다
다음 x[-2] 를 치게되면 현재 x 벡터의 2번째 원소를 삭제시키는 것
Summaries and Subscripting
x<-c(7.5,8.2,3.1,5.6,8.2,9.3,6.5,7.0,9.3,1.2,14.5,6.2)
mean(x)
var(x)
summary(x) summary 에서 median은 중간학생의 성적,
1st Qu.=25퍼센트에 해당하는 성적, 3rd Qu.=75퍼센트에 해당하는 성적
sd(x)
range(x)
<첨언>
이제 x에서 벡터로 다루어보자
x[c(2,4,9)]
만약 x에서 2,4,9번째 원소만 제외하고 싶다면?
x[-c(2,4,9)]
x<-x[-c(2,4,9)] 이렇게 해야합니다
x
이번에는 x에서 7번째 부터 원소를 나타나게 해봅시다
x[-(1:6)]
x<-x[-(1:6)]
x
Matrices
x<-c(5,7,9)
y<-c(6,3,4)
z<-cbind(x,y) x를 첫번째 컬럼, y를 두번째 컬럼으로 매트릭스를 생성해주는 명령어 cbind
z[3,2]=10 z 매트릭스의 3행2열 원소를 10으로 변경시킨 것
dim(z) z 매트릭스의 행 열 수를 보여줌
<문제>
w<-rbind(x,y) 이 함수는 어떤 식으로 이해하면 될까? (cbind 가 column 이라면 rbind는?)
이제는 매트릭스를 합성(bind)이 아니라 스스로 만들고 싶다면?
z<-matrix(c(5,7,9,6,3,4),nrow=2)
w<-matrix(c(5,7,9,6,3,4),ncol=3)
의미를 생각해 보면 ncol=2 는 컬럼을 2개 되게끔 매트릭스를 생성하라는 의미이다
z<-matrix(c(5,7,9,6,3,4),ncol=3,byrow=F)
z<-matrix(c(5,7,9,6,3,4),ncol=3,byrow=T)
byrow를 True 냐 False 냐에 따라서 행,열에 원소가 채워지는 순서가 정해짐
매트릭스의 행렬에 이름 붙여주기
x = matrix(1:6, nrow = 2)
dimnames(x) = list(c("First", "Second"), c("A", "B", "C")) #행에는 1st 2nd , 열에는 ABC 이름을 정해주고 있다.
x
초기값 설정 (개념 중요함)
이 초기값을 잘 알아둬야, 프로그램을 구성할 때 본인이 편해진다
s = 0
for(i in 1:5)
s=s+i
s
s를 1부터 5까지 누적해서 더해라
s = 0
for(i in seq(0,100,2))
s=s+i
s
s를 0부터 100까지 짝수들만 더한 값 출력
s = 0
for(i in seq(100,1000,25))
s=s+i
s
for (아마, 전산통계학 시간때 제일 많이 쓸겁니다)
우선 셋팅을 x는 10x10 에 1~100을 원소로 가지는 매트릭스로 두고 하자
'x의 대각선=0' 을 만들어보자
x=matrix(1:100,10)
for(i in 1:ncol(x))
{for(j in i){x[i,j]=0}}
x
'x의 맨밑줄=0' 을 만들어보자
x=matrix(1:100,10)
for(i in ncol(x)){
for(j in 1:ncol(x)){x[i,j]=0}}
x
'x의 ㄱ=0' 을 만들어보자
x=matrix(1:100,10)
for(i in 1){
for(j in 1:ncol(x)){
x[i,j]=0
x[j,(i+ncol(x)-1)]=0
}
}
x
'x의 ㄴ=0'
x=matrix(1:100,10)
for(i in 1){
for(j in 1:ncol(x)){
x[j,i]=0
x[(i+ncol(x)-1),j]=0
}
}
x
<첨언>
의외로 복잡하지는 않다. 그냥 i를 1~ncol(x) 이거나 i를 어느 한 수로 고정
그렇다면, x를 11x11 매트릭스로 설정하고, 'ㄷ,ㅁ,ㅂ=0' 으로도 만들 수 있지 않겠는가?