[Data Science With R] 14. 반복수행 with purrr

2023. 4. 18. 18:19·Data Science/Manipulation

1. 명령형 프로그래밍

  • for 루프 : 출력 + 시퀀스 + 본문
    • 출력 : vector(type, length)로 길이가 주어진 긴 벡터 생성
    •  시퀀스 : 자료가 데이터 프레임인 경우 1:legnth(data)보다 seq_along(data)가 안전
  • while 루프 
    • for문과 다르게 시퀀스의 길이가 명확하지 않을 때 유용하다.
  • 출력 길이를 모르는 경우 :  결과를 리스트에 저장후 unlist 혹은 purrr::flatten_* 함수를 사용
  • 긴 문자열이 출력되는 경우 : 문자형 벡터에 저장후 paste 혹은 str_c 함수를 사용해 단일 문자열로 결합
  • 큰 데이터 프레임을 생성하는 경우 : 결과를 리스트에 저장후 bind_rows 및 bind_cols 함수를 사용

 

2. 함수형 프로그래밍

map(data, fun, ...) 리스트를 출력
map_lgl(data, fun, ...) 논리형 벡터를 출력
map_int(data, fun, ...) 정수형 벡터를 출력
map_dbl(data, fun, ...) 더블형 벡터를 출력
map_chr(data, fun, ...) 문자형 벡터를 출력
map2(.x, .y, .f)  x, y 변수의 원소별(순서대로)로 함수 fun(x, y, …)을 적용한 값을 리스트로 반환
pmap(.l, .f)  리스트를 받아 각 변수의 첫번째~마지막번째 원소를
fun
에 적용시킨 값을 리스트로 반환
invoke_map(.f, .x=list(NULL)) 함수리스트(Function List) f에 변수 x의 값을 각각 넣은 값들을 리스트로 반환
(현재 deprecated function으로 map2 + exec 구문으로 대체)
pmap(.l=list(n=c(3,5,10), mean=c(-5,0,5), sd=c(1,3,5)), .f=rnorm)
Map(f=rnorm, n=c(3,5,10), mean=c(-5,0,5), sd=c(1,3,5))

이번에는 deprecated function인 invoke_map과 이를 대체할 수 있는 map2 + exec 구문입니다.

param <- list(
  list(min=-1, max=1),
  list(sd=5),
  list(lambda=10))
f <- c("runif", "rnorm", "rpois")

invoke_map(f, param, n=5)
map2(.x=f, .y=param, .f=function(x,y){exec(x, n=5, !!!y)})

 

3. 실패 처리 : 몇 개의 오류로 성공한 모든 결과에 접근할 수 없는 상황을 방지

  • safely(fun) 함수를 사용해 오류가 발생해도 다른 성공결과에 접근할 수 있음
    • 단 safely(fun)함수는 함수공장(function factory)로 출력이 함수형태
    • result : 원래 fun을 적용했을 때 결과로 오류가 있다면 NULL이 반환
    • error : fun을 적용했을 때 오류가 있다면 이를 반환
  • possibly(.f, otherwise) 함수는 safely의 단순한 버전으로 오류가 뜨는 값의 반환을 otherwise로 지정
safe_log <- safely(log)
list("a",10,100) %>% 
  map(safe_log) %>% 
  transpose()

 

저작자표시 비영리 변경금지 (새창열림)

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

[R] all_of와 any_of를 사용한 변수 선택 (조건을 이용한 선택 추가)  (1) 2023.07.29
[Data Science With R] 15. Modelr을 활용한 모델 생성  (0) 2023.05.17
[Data Science With R] 13. 함수형(Functional) with Base and purrr  (0) 2023.04.16
[Data Science With R] 12. 함수(Function)  (0) 2023.04.16
[Data Science With R] 11. Time Data with lubridate (202406)  (0) 2023.04.08
'Data Science/Manipulation' 카테고리의 다른 글
  • [R] all_of와 any_of를 사용한 변수 선택 (조건을 이용한 선택 추가)
  • [Data Science With R] 15. Modelr을 활용한 모델 생성
  • [Data Science With R] 13. 함수형(Functional) with Base and purrr
  • [Data Science With R] 12. 함수(Function)
임파카
임파카
[ML & Statistics] 모바일 버전에서 수식 오류가 있어 PC 환경에서 접속하는 것을 권장합니다.
  • 임파카
    무기의 스탯(Stat)
    임파카
  • 전체
    오늘
    어제
    • Study (149)
      • Data Science (44)
        • Modeling (18)
        • Manipulation (21)
        • Visualization (4)
      • Statistics (59)
        • Mathmetical Statistics (53)
        • Categorical DA (1)
      • Web Programming (17)
      • AI (26)
        • Machine Learning (16)
        • Deep Learning (10)
      • 활동 및 프로젝트 (3)
  • 인기 글

  • hELLO· Designed By정상우.v4.10.5
임파카
[Data Science With R] 14. 반복수행 with purrr
상단으로

티스토리툴바