참조와 복사

R에서 확장 가능한 데이터 처리

Simon Urbanek

Member of R-Core, Lead Inventive Scientist, AT&T Labs Research

대형 행렬과 행렬 - 공통점

  • 부분 집합 추출
  • 값 할당
R에서 확장 가능한 데이터 처리

대형 행렬과 행렬 - 차이점

  • big.matrix는 디스크에 저장됩니다
  • R 세션 간에 유지됩니다
  • R 세션 간에 공유 가능합니다
R에서 확장 가능한 데이터 처리

R은 할당 시 일반적으로 복사본을 생성합니다

a의 복사본을 생성하여 b에 할당합니다.

a <- 42
b <- a
a
42
b
42
a <- 43
a
43
b
42
R에서 확장 가능한 데이터 처리

R은 할당 시 일반적으로 복사본을 생성합니다

a <- 42

foo <- function(a){a <- 43 paste("Inside the function a is", a)}
foo(a)
"Inside the function a is 43"
paste("Outside the function a is still", a)
"Outside the function a is still 42"
R에서 확장 가능한 데이터 처리

복사되지 않는 R 객체

이 함수는 전역 환경의 a 값을 변경합니다

foo <- function(a) {a$val <- 43 
                    paste("Inside the function a is", a$val)}
a <- environment()
a$val <- 42
foo(a)
"Inside the function a is 43"
paste("Outside the function a$val is", a$val)
"Outside the function a$val is 43"
R에서 확장 가능한 데이터 처리

deepcopy()

# x is a big matrix
x <- big.matrix(...)

# x_no_copy and x refer to the same object
x_no_copy <- x

# x_copy and x refer to different objects
x_copy <- deepcopy(x)

R에서 확장 가능한 데이터 처리

참조 동작

R은 암묵적으로 복사를 수행하지 않습니다

  • 메모리 사용 최소화
  • 실행 시간 단축
R에서 확장 가능한 데이터 처리

복사되지 않는 R 객체

library(bigmemory)

x <- big.matrix(nrow = 1, ncol = 3, type = "double", 
                init = 0, 
                backingfile = "hello-bigmemory.bin", 
                descriptorfile = "hello-bigmemory.desc")
R에서 확장 가능한 데이터 처리

복사되지 않는 R 객체

x_no_copy <- x
x[,]
0 0 0
x_no_copy[,]
0 0 0
x[,] <- 1
x[,]
1 1 1
x_no_copy[,]
1 1 1
R에서 확장 가능한 데이터 처리

복사되지 않는 R 객체

x_copy <- deepcopy(x)
x[,]
1 1 1
x_copy[,]
1 1 1
x[,] <- 2
x[,]
2 2 2
x_copy[,]
1 1 1
R에서 확장 가능한 데이터 처리

직접 연습해 보겠습니다!

R에서 확장 가능한 데이터 처리

Preparing Video For Download...