전산통계학 6주차 강의 - apply, Array, Break, Next, repeat, while
코딩 공부/R-전산 통계학 2019. 11. 17. 03:00break : 조건이 맞다면 거기서 끝내라
x<-1:5
x
for (val in x) {
if (val ==3) {break
}
print(val)
}
next : 어떤 조건에 맞는값이 나온다면 다음으로 건너뛰어라
x <- 1:5
for (val in x) {
if (val == 3){
next
}
print(val)
}
while : for과 다르게 시작할때 정의와 끝값이 필요함
i=1
while (i<11) {
result<-i*2
print(result)
i=i+1
if (result ==22) {break}
}
repeat : 특정 상황을 반복하다가 조건이 반복되면 종료
i<-1
repeat{
result=i*2
if(result>20) {break}
print(result)
i=i+1
}
<문제>
15의배수가 3번 나오면 break
i<-1
repeat{
if(i/15 >3) {break}
print(i)
i=i+1
}
<문제>
순서대로 더해나가는 것이 100,200 사이에있다면 그것만 뽑아라 ; repeat, while 둘다 써보기
i<-1
repeat {
result <- i*(i+1)/2
if (result>200) {break}
if (result>100)
print(result)
i=i+1
}
i<-1; result<-0
while(result<200) {
if (result>100) print(result)
i=i+1
result<-i*(i+1)/2
}
apply
x <- matrix(1:12, nrow=3, ncol=4)
x
"1=row ; 2=column 을 뜻한다, (나중에 3도 나오는데, 3은 차원을 말합니당)"
apply(x, 1, sum)
apply(x, 2, min)
<문제>
apply 함수처럼 1,2에 따라서 로우 칼럼 다르게 또한 썸과 민도 2개에따라서 나오게끔 똑같이 for ,if써서 똑같이 나오게 해봅시다
x <- matrix(1:12, nrow=3, ncol=4)
x
apply(x,1,mean)
y=c()
sm<-function(x,num,q) {
y=c()
if (num==1) {
for (i in 1: nrow(x)) {
if (q=="sum") { y<-c(y, sum(x[i,]) )}
if (q=="mean") { y<-mean(x[i,]) }
}
}
if (num==2) {
for (j in 1: ncol(x)) {
if (q=="sum") { y<-c(y, sum(x[,j]) )}
if (q=="mean") { y<-mean(x[,j]) }
}
}
y
}
sm(x,1,"sum")
sm(x,1,"mean")
array
w <- array(1:12, dim=c(2,3,2),dimnames=list(c("A","B"), c("X","Y","Z"), c("N","M")))
w
위의 apply 가 2차원을 다룬다면 (행과 열), array 는 3차원을 다룬다고 생각해보자 (행과 열, 차원)
w[2,3,1]
w[1:2,,"M"]
w[,,"M"]
apply(w, 1, sum) ; "A","B" 에 대해서 해보라구
apply(w, 2, sum) ; "X","Y","Z" 에 대해서 해보라구
apply(w, 3, sum) ; "M","N" 에 대해서 해보라구
<문제>
그러면 array 에서의 apply 를 우리가 임의로 프로그램을 짜서 동일하게 만들 수 있지 않을까?
(2차원에서 할 때랑 동일하게 하면 안되는 것이, array는 3차원 이기 때문에, 어떤식으로 데이터를 뽑을지 + 차례대로 어떻게 연산시킬지를 모두 고려해봐야 할 겁니다)