R

Similar documents
MySQL-.. 1

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

중간고사

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

PowerPoint Presentation

PowerPoint 프레젠테이션

금오공대 컴퓨터공학전공 강의자료

기술통계

4. #include <stdio.h> #include <stdlib.h> int main() { functiona(); } void functiona() { printf("hihi\n"); } warning: conflicting types for functiona

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

슬라이드 1

歯ki 조준모.hwp

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

쉽게 풀어쓴 C 프로그래밍

Multi-pass Sieve를 이용한 한국어 상호참조해결 반-자동 태깅 도구

윈도우즈프로그래밍(1)

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

슬라이드 1

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

adfasdfasfdasfasfadf

Contents Activity Define Real s Activity Define Reports UI, and Storyboards Activity Refine System Architecture Activity Defin

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - Java7.pptx

텀블러514

PowerPoint 프레젠테이션

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

목차 배열의개요 배열사용하기 다차원배열 배열을이용한문자열다루기 실무응용예제 C 2

PowerPoint 프레젠테이션

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

Microsoft Word - SAS_Data Manipulate.docx

chap 5: Trees

예제 1.1 ( 관계연산자 ) >> A=1:9, B=9-A A = B = >> tf = A>4 % 4 보다큰 A 의원소들을찾을경우 tf = >> tf = (A==B) % A

PowerPoint Presentation

Microsoft PowerPoint 웹 연동 기술.pptx

설계란 무엇인가?

Microsoft PowerPoint - chap06-2pointer.ppt

PowerPoint Presentation

슬라이드 1

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

2003report hwp

R

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Microsoft PowerPoint - C++ 5 .pptx

Columns 8 through while expression {commands} 예제 1.2 (While 반복문의이용 ) >> num=0

Ext JS À¥¾ÖÇø®ÄÉÀ̼ǰ³¹ß-³¹Àå.PDF

C# Programming Guide - Types

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

Microsoft PowerPoint - 08-C-App-19-Quick-Preprocessor

Infinity(∞) Strategy

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습

UI TASK & KEY EVENT

2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1 <LinearLayout xmlns:android=" 2 xmlns:tools="

Tcl의 문법

C 프로그래밊 개요

Microsoft PowerPoint 세션.ppt

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

R-1: R intro. & Objects

Microsoft PowerPoint - chap-11.pptx

untitled

API 매뉴얼

Microsoft PowerPoint - chap06-5 [호환 모드]

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

553호

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

11장 포인터

Chapter 4. LISTS

컴파일러

11장 포인터

별지제 호서식 연구결과보고서 과제명 소속소방산업기술연구소연구책임자권성필 연구기간 연구목표 연구배경

Visual Basic 반복문

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

확률과통계 강의자료-1.hwp

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

InsertColumnNonNullableError(#colName) 에해당하는메시지출력 존재하지않는컬럼에값을삽입하려고할경우, InsertColumnExistenceError(#colName) 에해당하는메시지출력 실행결과가 primary key 제약에위배된다면, Ins

기본자료형만으로이루어진인자를받아서함수를결과값으로반환하는고차함수 기본자료형과함수를인자와결과값에모두이용하는고차함수 다음절에서는여러가지예를통해서고차함수가어떤경우에유용한지를설명한다. 2 고차함수의 예??장에서대상체만바뀌고중간과정은동일한계산이반복될때함수를이용하면전체연산식을간 단

UI TASK & KEY EVENT

The Pocket Guide to TCP/IP Sockets: C Version

/chroot/lib/ /chroot/etc/

PowerPoint 프레젠테이션

C++-¿Ïº®Çؼ³10Àå

API 매뉴얼

3.2 함수의정의 Theorem 6 함수 f : X Y 와 Y W 인집합 W 에대하여 f : X W 는함수이다. Proof. f : X Y 가함수이므로 f X Y 이고, Y W 이므로 f X W 이므로 F0이만족된다. 함수의정의 F1, F2은 f : X Y 가함수이므로

Microsoft PowerPoint - chap06-1Array.ppt

Science Cube 1.0 User Guide

슬라이드 1

PowerPoint 프레젠테이션

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

Chapter 4. LISTS

R Cookbook

PowerPoint 프레젠테이션

쉽게배우는알고리즘 6장. 해시테이블 테이블 Hash Table

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

확률 및 분포

Transcription:

R 프로그래밍의기초 Big Data Analytics Short Courses 5 Big Data Analytics Short Courses R 프로그래밍의기초 5 1 / 37

R Programming 1 R Programming 2 3 Big Data Analytics Short Courses R 프로그래밍의기초 5 2 / 37

Topic R Programming 1 R Programming R Programming 함수반복예제 Big Data Analytics Short Courses R 프로그래밍의기초 5 2 / 37

R Programming R Programming R Programming 함수 : function sse <- function(x) { sum((x - mean(x))^2) } 반복 : for x <- numeric(100) for (i in 2:length(x)) { x[i] <- x[i - 1] + rnorm(1) } 조건 : if, else if (is.numeric(x)) { hist(x) } else { barplot(table(x)) } Big Data Analytics Short Courses R 프로그래밍의기초 5 3 / 37

함수 : 구조 R Programming 함수 수학함수 f (x) = x + 1 g(x, y) = x + y + 1 n S(x) = (x i x) 2 i=1 R 함수 f <- function(x) x + 1 g <- function(x, y) x + y + 1 S <- function(x) sum((x - mean(x))^2) 함수의구성요소 : 함수이름 (name), 인자 (parameter), 본체 (body) Big Data Analytics Short Courses R 프로그래밍의기초 5 4 / 37

함수 : 리턴값 R Programming 함수 마지막으로실행되는표현의값이함수의리턴값이된다 명시적으로 return() 명령을쓸수도있다 함수리턴값은반드시하나이다. 여러가지값이라면벡터, 리스트등으로묶는다. describe <- function(x) { m <- mean(x) s <- sd(x) med <- median(x) mad <- median(abs(x - median(x))) * 1.4826 #= mad(x) c(mean = m, sd = s, median = med, mad = mad) } > x <- c(3, 5, 7, 8, 6, 2, 0, 4, 7, 2) > describe(x) mean sd median mad 4.400000 2.633122 4.500000 3.706500 Big Data Analytics Short Courses R 프로그래밍의기초 5 5 / 37

함수 : 리턴값 R Programming 함수 함수는리턴값이필요없을수도있다. 주어진명령을순서대로실행하는용도로사용할수있다. myhist <- function(x) { xs <- seq(min(x), max(x), length.out = 100) ys <- dnorm(xs, mean(x), sd(x)) hist(x, breaks = sqrt(length(x)), probability = TRUE, ylim = range(ys)) lines(xs, ys) } > x <- rnorm(100) > myhist(x) Histogram of x Density 0.00 0.10 0.20 0.30 3 2 1 0 1 2 3 x Big Data Analytics Short Courses R 프로그래밍의기초 5 6 / 37

반복 R Programming 반복 for (i in 1:9) { print(rep(i, i)) } [1] 1 [1] 2 2 [1] 3 3 3 [1] 4 4 4 4 [1] 5 5 5 5 5 [1] 6 6 6 6 6 6 [1] 7 7 7 7 7 7 7 [1] 8 8 8 8 8 8 8 8 [1] 9 9 9 9 9 9 9 9 9 반복할대상들의목록 : 1:9 반복할대상을가리키는변수 : i, 반복할내용 : print(rep(i, i)) Big Data Analytics Short Courses R 프로그래밍의기초 5 7 / 37

반복 R Programming 반복 par(mfrow = c(2, 2), mar = c(5, 4, 1, 1)) for (cn in colnames(iris)[1:4]) { hist(iris[, cn], main = cn) } Frequency 0 10 20 30 Sepal.Length Frequency 0 10 25 Sepal.Width 4 5 6 7 8 2.0 2.5 3.0 3.5 4.0 iris[, cn] iris[, cn] Petal.Length Petal.Width Frequency 0 10 30 Frequency 0 10 20 30 1 2 3 4 5 6 7 0.0 0.5 1.0 1.5 2.0 2.5 iris[, cn] iris[, cn] 반복대상이일련의숫자일필요는없다. 위 for 문에서반복대상은 > colnames(iris)[1:4] [1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" Big Data Analytics Short Courses R 프로그래밍의기초 5 8 / 37

반복 R Programming 반복 반복이전단계에의존하는구조를가질수있다. x <- numeric(100) for (i in 2:length(x)) { x[i] <- x[i - 1] + rnorm(1) } plot(x, type = "l") x 10 5 0 Big Data0Analytics 20 Short Courses 40 60 80 R 프로그래밍의 100 기초 5 9 / 37

예제 R Programming 예제 120개의 CSV 파일이 sensdat 디렉토리에있다. 어떤센서에서수집한데이터이다. 한센서가한파일을생성한다. 파일명은익명화된아이디이다. 구형센서는문자로신형센서는숫자로기록한다. 각파일은 time, value 두컬럼으로구성되어있다. 구형데이터는 value가문자, 신형데이터는 value가숫자이다. 각파일을읽어서 value가숫자인경우에는히스토그램 value가문자인경우에는막대그래프를그려라. 그래프는한페이지에 5행 3열로배열하여 PDF 파일로출력하여라. Big Data Analytics Short Courses R 프로그래밍의기초 5 10 / 37

예제 R Programming 예제 현재작업디렉토리아래 sensdat 디렉토리를놓고실행한다. pdf("dist.pdf", width = 8, height = 12) par(mfrow = c(5, 3)) for (filename in list.files("sensdat/")) { dat <- read.csv(filename) val <- dat$value if (is.numeric(val)) { hist(val) } else { barplot(table(val)) } } dev.off() Big Data Analytics Short Courses R 프로그래밍의기초 5 11 / 37

Topic 2 Big Data Analytics Short Courses R 프로그래밍의기초 5 12 / 37

Video: Caesar Cipher At Khan Academy Big Data Analytics Short Courses R 프로그래밍의기초 5 13 / 37

c = (p + k) mod 26 A B C D E F G H I J... V W X Y Z plain: 0 1 2 3 4 5 6 7 8 9... 21 22 23 24 25 cipher: 3 4 5 6 7 8 9 10 11 12... 24 25 0 1 2 D E F G H I J K L M N... Y Z A B C Big Data Analytics Short Courses R 프로그래밍의기초 5 14 / 37

영문자를숫자로 영문자대문자 / 소문자변환 > tolower("hello") [1] "hello" > toupper("hello") [1] "HELLO" 문자열을아스키코드숫자벡터로 > chartoraw("hello") [1] 48 65 6c 6c 6f > as.integer(chartoraw("hello")) [1] 72 101 108 108 111 아스키코드숫자벡터를문자열로 > as.raw(c(72, 101, 108, 108, 111)) [1] 48 65 6c 6c 6f > rawtochar(as.raw(c(72, 101, 108, 108, 111))) [1] "Hello" Big Data Analytics Short Courses R 프로그래밍의기초 5 15 / 37

영문자를숫자로 편의상모든영문자를대문자로바꾼후 A 0, B 1, C 2,..., Z 25 로바꾸자열쇠를 k, 문자번호를 c라고하면암호화된문자의번호는 (c + k) mod 26 > msg <- "Hello" > key <- 3 > (msg <- toupper(msg)) [1] "HELLO" > (base <- as.integer(chartoraw("a"))) [1] 65 > (code <- as.integer(chartoraw(msg)) - base) [1] 7 4 11 11 14 > (encoded <- (code + key)%%26) [1] 10 7 14 14 17 > rawtochar(as.raw(encoded + base)) [1] "KHOOR" Big Data Analytics Short Courses R 프로그래밍의기초 5 16 / 37

함수 : encode.caesar() 메시지와암호키를받아암호화된메시지를만드는함수를작성하자 encode.caesar <- function(msg, key) { msg <- toupper(msg) base <- as.integer(chartoraw("a")) code <- as.integer(chartoraw(msg)) - base encoded <- (code + key)%%26 rawtochar(as.raw(encoded + base)) } 함수를사용하여보자 > encode.caesar("hello", 3) [1] "KHOOR" > encode.caesar("comebackhome", 3) [1] "FRPHEDFNKRPH" Big Data Analytics Short Courses R 프로그래밍의기초 5 17 / 37

함수 : decode.caesar() 암호화된문자가 c, 암호키가 k 라면원문은 p = (c k) mod 26 암호화하는알고리즘과형식이동일하다. 암호를푸는함수는내용을새로작성할필요가없다 decode.caesar <- function(msg, key) { encode.caesar(msg, -key) } 함수를사용하여보자 > decode.caesar("frphedfnkrph", 3) [1] "COMEBACKHOME" Big Data Analytics Short Courses R 프로그래밍의기초 5 18 / 37

암호깨기 : 모든가능한해독 암호키 k 를모른다면? 모든가능한암호키를이용한결과를출력해보자. > cmsg <- "YQQFYQMFZUZQ" > for (key in 1:25) print(decode.caesar(cmsg, key)) [1] "XPPEXPLEYTYP" [1] "WOODWOKDXSXO" [1] "VNNCVNJCWRWN" [1] "UMMBUMIBVQVM" [1] "TLLATLHAUPUL" [1] "SKKZSKGZTOTK" [1] "RJJYRJFYSNSJ" [1] "QIIXQIEXRMRI" [1] "PHHWPHDWQLQH" [1] "OGGVOGCVPKPG" [1] "NFFUNFBUOJOF" [1] "MEETMEATNINE" [1] "LDDSLDZSMHMD" [1] "KCCRKCYRLGLC" [1] "JBBQJBXQKFKB" [1] "IAAPIAWPJEJA" [1] "HZZOHZVOIDIZ" [1] "GYYNGYUNHCHY" [1] "FXXMFXTMGBGX" [1] "EWWLEWSLFAFW" [1] "DVVKDVRKEZEV" Big Data Analytics Short Courses R 프로그래밍의기초 5 19 / 37

암호깨기 : 문자빈도함수 문자의빈도를이용하면통계적으로암호를깰수있다. 우선문자열이주어지면문자빈도를계산하는함수를작성하자. charfreq <- function(s) { table(factor(unlist(strsplit(s, "")), LETTERS)) } 문자빈도함수를사용해보자. > charfreq("comebackhome") A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 1 2 0 2 0 0 1 0 0 1 0 2 0 2 0 0 0 0 0 0 0 0 0 0 0 Big Data Analytics Short Courses R 프로그래밍의기초 5 20 / 37

암호깨기 : 영어의문자빈도 영어의일반적인문자빈도와유사한빈도를가지는해독문을답으로선택하려고한다. 우선영어의일반적인문자빈도가필요하다. > alice <- scan("http://www.gutenberg.org/files/11/11.txt", what = "", quote = "") > engtab <- prop.table(charfreq(alice)) > plot(engtab) engtab 0.00 0.08 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Big Data Analytics Short Courses R 프로그래밍의기초 5 21 / 37

암호깨기 : 카이제곱검정 암호화된메시지 > (cmsg <- encode.caesar("comebackhome", 3)) [1] "FRPHEDFNKRPH" 영어문자비율정보를이용하여카이제곱검정 > chisq.test(charfreq(cmsg), p = engtab) Chi-squared test for given probabilities data: charfreq(cmsg) X-squared = 41.2067, df = 25, p-value = 0.02183 카이제곱값만필요 > chisq.test(charfreq(cmsg), p = engtab)$statistic X-squared 41.20674 Big Data Analytics Short Courses R 프로그래밍의기초 5 22 / 37

암호깨기 : 카이제곱검정 암호키를바꾸어가며카이제곱값을계산. 가장작은것이해답. > (dmsg <- decode.caesar(cmsg, key = 1)) [1] "EQOGDCEMJQOG" > chisq.test(charfreq(dmsg), p = engtab)$statistic X-squared 79.95696 > (dmsg <- decode.caesar(cmsg, key = 2)) [1] "DPNFCBDLIPNF" > chisq.test(charfreq(dmsg), p = engtab)$statistic X-squared 42.85796 > (dmsg <- decode.caesar(cmsg, key = 3)) [1] "COMEBACKHOME" > chisq.test(charfreq(dmsg), p = engtab)$statistic X-squared 33.48315 Big Data Analytics Short Courses R 프로그래밍의기초 5 23 / 37

암호깨기 : 함수 decipher.caesar <- function(cmsg, ptab) { dmsg <- character(26) x2 <- numeric(26) for (key in 1:26) { dmsg[key] <- decode.caesar(cmsg, key) x2[key] <- chisq.test(charfreq(dmsg[key]), p = ptab)$statistic } } out <- data.frame(key = 1:26, dmsg, x2) out[order(out$x2), ] Big Data Analytics Short Courses R 프로그래밍의기초 5 24 / 37

암호깨기 : 함수 > (cmsg <- encode.caesar("comebackhome", 3)) [1] "FRPHEDFNKRPH" > decipher.caesar(cmsg, engtab) key dmsg x2 3 3 COMEBACKHOME 33.48315 25 25 GSQIFEGOLSQI 40.51544 9 9 WIGYVUWEBIGY 41.03667 26 26 FRPHEDFNKRPH 41.20674 19 19 MYWOLKMURYWO 41.80172 2 2 DPNFCBDLIPNF 42.85796 17 17 OAYQNMOWTAYQ 43.35923 15 15 QCASPOQYVCAS 48.56365 23 23 IUSKHGIQNUSK 49.35341 12 12 TFDVSRTBYFDV 62.87022 1 1 EQOGDCEMJQOG 79.95696 21 21 KWUMJIKSPWUM 86.76777 7 7 YKIAXWYGDKIA 116.67189 13 13 SECURQSAXECU 118.97761 24 24 HTRJGFHPMTRJ 168.17965 22 22 JVTLIHJROVTL 197.87433 10 10 VHFXUTVDAHFX 379.43202 20 20 LXVNKJLTQXVN 423.33367 Big Data Analytics Short Courses R 프로그래밍의기초 5 25 / 37

Topic 3 Big Data Analytics Short Courses R 프로그래밍의기초 5 26 / 37

LCD 모니터의픽셀 : RGB Big Data Analytics Short Courses R 프로그래밍의기초 5 27 / 37

(http://radio.feld.cvut.cz/matlab/techdoc/matlab_prog/ch12_ n11.html) Big Data Analytics Short Courses R 프로그래밍의기초 5 28 / 37 이미지데이터 : RGB Array

이미지파일읽기 png 패키지이용 > library(png) PNG 파일읽기 > mandrill <- readpng("mandrill.png") 크기확인 > dim(mandrill) [1] 512 512 3 RGB Array > mandrill[,, 1] # RED Intensity Matrix > mandrill[,, 2] # GREEN Intensity Matrix > mandrill[,, 3] # BLUE Intensity Matrix Big Data Analytics Short Courses R 프로그래밍의기초 5 29 / 37

RGB Array > image(mandrill[,, 1]) Big Data Analytics Short Courses R 프로그래밍의기초 5 30 / 37

RGB Array par(mfrow = c(1, 3)) image(mandrill[,, 1], col = rgb((0:255)/255, 0, 0)) image(mandrill[,, 2], col = rgb(0, (0:255)/255, 0)) image(mandrill[,, 3], col = rgb(0, 0, (0:255)/255)) Big Data Analytics Short Courses R 프로그래밍의기초 5 31 / 37

회색조로변환 mandrill.gr <- apply(mandrill, c(1, 2), mean) writepng(mandrill.gr, "mandrill_gr.png") Big Data Analytics Short Courses R 프로그래밍의기초 5 32 / 37

흑백으로변환 mandrill.bw <- ifelse(mandrill.gr > 0.5, 1, 0) writepng(mandrill.bw, "mandrill_bw.png") Big Data Analytics Short Courses R 프로그래밍의기초 5 33 / 37

16 단계회색조로변환 mandrill.gr16 <- round(mandrill.gr * 16)/16 writepng(mandrill.gr16, "mandrill_gr16.png") Big Data Analytics Short Courses R 프로그래밍의기초 5 34 / 37

회색조변환의비교 원래의명암을그대로사용한경우색의수 16 단계회색조만사용한경우 시각적인차이가있는가? > length(table(mandrill.gr)) [1] 681 > length(table(mandrill.gr16)) [1] 15 Big Data Analytics Short Courses R 프로그래밍의기초 5 35 / 37

노이즈 추가 mandrill.noise <- mandrill n <- round(0.3 * prod(dim(mandrill)[1:2])) # 노이즈 비율 30% xrand <- sample(1:512, n, replace=true) yrand <- sample(1:512, n, replace=true) for(i in 1:n) mandrill.noise[xrand[i], yrand[i], ] <- runif(3) writepng(mandrill.noise, "mandrill_noise.png") Big Data Analytics Short Courses R 프로그래밍의 기초 5 36 / 37

모자이크효과 mandrill.mos <- mandrill w <- 16 # 모자이크조각의가로세로크기 for(i in seq(1, 512, w)) { for(j in seq(1, 512, w)) { for(k in 1:3) { mandrill.mos[i:(i+w-1), j:(j+w-1), k] <- mean(mandrill[i:(i+w-1), j:(j+w-1), k]) } } } writepng(mandrill.mos, "mandrill_mosaic.png") Big Data Analytics Short Courses R 프로그래밍의기초 5 37 / 37