라벨이 R인 게시물 표시

R 패키지, vignette 그리고 설치

 R 패키지를 만들 때 vignette를 만드려면 usethis를 사용한다. 패키지 생성 때 > usethis::use_vignette("Example") Example이라는 이름의 파일이 만들어진다. 이제 github에서 설치를 할 때, remotes::install_github('drtagkim/sampleCodeNotRun',                         build_manual = TRUE,                         build_vignettes = TRUE)

S3 클래스 - R 객체 지향 예제

원을 객체로 만들어 면적을 구해보자. #Constructor circle <- function(id,r) {   #member   obj=list(     id=id,     r=r   )   #class declaration   class(obj)='circle'   obj } area <- function(x) UseMethod('area',x) area.circle <- function(x) {   pi*x$r^2 } print.circle <- function(x) {   cat(paste0(     "Shape: circle\n",     "Radius: ",x$r,     '\n'   )) } 이제 활용해보자. > c1 <- circle(1,10) > c2 <- circle(2,20) > c1 Shape: circle Radius: 10 > c2 Shape: circle Radius: 20 > area(c1) [1] 314.1593 > area(c2) [1] 1256.637

RStudio 실행시 R 찾지 못할 때

 실행할 때 Ctrl 키를 누르고 있으면 R을 선택할 수 있다. 혹시 실행 문제가 있다면 제일 먼저 시도해볼 것.

dummy와 tidyr의 pivot_wider

 코드로 간단히 설명 > library(tidyverse) > fish_encounter %>% pivot_wider(name_from=station,values_from=seen)

cronR - 리눅스 서버에서 R 작업 스케줄링

> library(cronR) > f   <- system.file(package = "cronR", "extdata", "helloworld.R") > cmd <- cron_rscript(f) > cron_add(command = cmd, frequency = 'minutely',    id = 'test1', description = 'My process 1', tags = c('lab', 'xyz')) > cron_add(command = cmd, frequency = 'daily', at='7AM', id = 'test2') > cron_njobs() > cron_ls() > cron_clear(ask=TRUE) > cron_ls() 출처:  https://rdrr.io/cran/cronR/man/cron_add.html

Google Cloud Computing Engine에 인스턴스 설치하다가...

 돈을 아껴보려 최소 사양으로 설치했더니 R 패키지 컴파일에 계속 실패했다. 생각해보니 전에도 이런 일이 있었는데 까먹고 있었다... 최소 4GB의 메모리가 필요한데 요걸 750MB로 해뒀으니 될리가... SWAP 메모리를 설정해야 tidyverse 등을 정상적으로 설치할 수 있다. 그래서, $ sudo swapon --show 역시 확인해보니 스왑 안 걸어뒀네?! $ sudo fallocate -l 4G /swapfile $ sudo chmod 600 /swapfile $ sudo mkswap /swapfile $ sudo swapon /swapfile 이러고 이제  /etc/fstab 파일 수정했다. $ sudo vi /etc/fstab 마지막 줄에 다음 추가 /swapfile swap swap defaults 0 0 음.. 확인해 보면 잘 되어 있다. $ sudo free -h -__- 이런... 점점 기억이...

TidyBlock

 https://tidyblocks.tech/ https://www.rstudio.com/resources/rstudioconf-2020/tidyblocks-using-the-language-of-the-tidyverse-in-a-blocks-based-interface/

tidyvere - furrr의 progress 표시하기

 병렬 처리를 할 때 furrr을 사용합니다. progress 처리를 하고 싶다면? library(progressr) library(furrrr) with_progress({     p<-progressor(steps=N) #N전체 개수     result <- my_data %>% map(function(x) {           #함수 정의          p() #스텝이 하나씩 넘어갑니다.           })     result })

ggplot 맥에서 한글 깨질 때

 ggplot2를 맥에서 사용할 때 축 제목 한글이 깨진다. 어떻게 해야 할까? theme()을 사용한다. mydata %>%  ggplot(...) +   theme(axis.title = element_text(family='AppleGothic'))

Dummy variable 확실하게 처리하기

 더미 변수를 만들기. # library(fastDummies) #샘플 데이터 fastDummies_example <- data.frame(numbers = 1:3,                     gender  = c("male", "male", "female"),                      animals = c("dog", "dog", "cat"),                      dates   = as.Date(c("2012-01-01", "2011-12-31",                                                       "2012-01-01")),                      stringsAsFactors = FALSE) #모든 컬럼을 근거로 더미 만들기 results <- fastDummies::dummy_cols(fastDummies_example) #특정 컬럼 결정하기 fastDummies::dummy_cols(fastDummies_example, select_columns = "numbers") #조합 줄이기 fastDummies::dummy_cols(fastDummies_example, remove_first_dummy ...

R로 리눅스 cron 작업할 때 조심할 점(crontab)

 crontab은 cron 작업을 아주 편하게 할 수 있도록 돕는 도구다. 편한 만큼 조심할 점도 있다. 온라인을 검색하면 crontab 사용법을 찾을 수 있다. 작업 편집을 하려면, $ crontab -e 그리고 nano 같은 도구를 골라 적당히 다음과 같은 작업을 쓰면 될 것 같이 설명이 나온다. * * * * * my_run.sh 아마 다음과 같은 링크들을 찾을 수 있을 것이다. https://jdm.kr/blog/2 https://nahosung.tistory.com/95 https://kibua20.tistory.com/89 R 사용자가 위 링크만 보고 crontab을 건드리면 정말 어렵고 힘든 길을 가야 한다. 왜냐하면 중요한 것들이 아무것도 설명되지 않았기 때문이다. crontab -e 로 실행되는 파일은 기본적으로 PATH가 설정되지 않았다. 따라서 PATH와 작업 HOME을 모두 설정해 줘야 한다. 우선 터미널에서 PATH를 확인하여 어디 적어두자. $ echo $PATH 이제 Rscript로 실행시킬 폴더 경로를 pwd 명령어로 알아내자. crontab -e를 실행 한 다음 가장 먼저 해 줄 것은 위에서 얻은 PATH와 실행파일(.sh)이 있는 경로를 HOME으로 설정하는 것이다. PATH=/usr/local/sbin:usr/local/bin:/usr/sbin:/sbin:/bin HOME=/home/mycom/myfolder 예를 들면 위와 같다. 이렇게 한 다음에 cron을 설정할 때 또 주의해야 한다. /home/mycom/myfolder/run.sh를 실행하려면 * * * * * ./run.sh 이렇게 해야 하고, run.sh의 권한을 766으로 바꿔줘야 한다. $ chmod 766 run.sh 이것이 끝이 아니다. $ R > .libPaths() [1] ... [2] ... 이렇게 경로가 나올 것이다. 여러분이 그냥 R로 실행했을 때 정상적으로 불러와지는 라이브러리도 cron으로 하면 안될 수도 있다. 따라서 현재 보이는 ...

Windows Batch로 R 스크립트 자동실행

오늘은 윈도우 배치 파일(.bat)로 크롤링을 자동화하는 방법을 이야기하렵니다. 샘플 코드는 다음과 같습니다.

R MariaDB 사용하여 초간단 데이터 입력

데이터 베이스를 사용하는 가장 간단한 방법은 역시 R을 사용하는 것이다. INSERT INTO로 복잡하게 다룰 것 없이 있는 테이블을 그냥 DB에 밀어넣고자 한다면 dbAppendTable()을 쓴다. MariaDB 사용자를 대상으로 한 포스트이지만 MySQL도 마찬가지다. 코드 예를 아래에 써 둔다. #loading data library(dplyr) library(RMariaDB) library(DBI) # ****은 가려진 부분이다. # 각자에 맞는 내용을 적기 바란다. con <- dbConnect(MariaDB(),user='root',password='****', host='*********',port=3301, dbname='*****') #스키마 복사 table_name_in_db <- 'matcars_in_db' copy_to(con,mtcars,table_name_in_db,temporary=FALSE) #mtcars가 데이터라고 하자. #데이터 입력 dbAppendTable(con,table_name_in_db,mtcars) #데이터 베이스 접속 종료 dbDisconnect(con)

데이터 과학, 딥러닝 환경을 구축하기 위한 최선의 방법

나는 다음과 같이 권고한다. 1. 윈도우즈 시스템을 써라. 아무래도 속편하다. 2. Anaconda를 설치할 것 3. Anaconda에서 new environment를 만들 것(예를 들면 tensorflow-gpu-env라는 이름) 4. 환경설정시 Python과 R을 전부 다 설정할 것 4. Anaconda 마켓에서 tensorflow-gpu와 keras-gpu를 모두 설치할 것(이때 필요한 라이브러리는 전부다 자동 설치한다. CUDA 등 전부... 얼마나 편한가!) 5. Jupyter Notebook이외에 RStudio와 Orange도 함께 설치한다(네비게이션 화면에서). 이렇게 하면 끝이다. 요즘 왠만한 PC는 4개 슬롯에 64*4=136GB의 메모리까지 지원한다. 딥러닝을 하려는 연구자는 최소 8GB의 GPU가 필요할 것이고 빅데이터 분석까지 생각한다면 못해도 64GB이상의 메모리는 확보되면 좋겠다. 하드웨어의 문제가 아니라 다들 소프트웨어 설치하느라 골치 아플 것 같은데 Anaconda와 conda 환경을 이용하면 너무나도 쉽게 해결된다.

tidyverse / group_by 설명

tidyverse 패키지 안에 dplyr 이 있는 것은 알죠? dplyr의 최애 함수는 group_by()이죠. 그룹을 지정하는 함수. group_by()로 지정한 다음에 .x와 .y를 쓸 수 있어요. .x는 그룹별 데이터를 tibble 객체로 받고 .y는 그룹의 값을 key처럼 받아요. 파이썬이나 자바스크립트 프로그래머들에게는 익숙한 개념이죠. .x와 .y를 이해했다면 group_map()과 group_modify()를 생각해볼 차례에요. mtcars를 사용해볼께요. 질문: 변속기 종류(am)별로 실린더 수(cyl)가 연비(mpg)에 미치는 영향력의 차이는? 이 문제를 풀려면 > lm(mpg~cyl,data=그룹데이터) 이제 그룹 데이터를 정의해야죠? > mtcars %>% group_by(am) 변속기별로 mtcars 데이터를 나눠서 생각하자는 것이에요. 이제 좀 붙여볼까요? > mtcars %>%    group_by(am) %>%    group_map(~broom::tidy(      lm(mpg~cyl,data=.x) )) 결과는 [[1]] # A tibble: 2 x 5   term        estimate std.error statistic       p.value   <chr>          <dbl>     <dbl>     <dbl>         <dbl> 1 (Intercept)    30.9      2.59      11.9  ...

tidyverse 특집 / purrr 소개

purrr Code Show All Code Hide All Code Download Rmd purrr tidyverse 무엇보다도 tidyverse를 먼저 불러와야한다. library(tidyverse) Map함수의 기본 purrr::map()은 함수에 파라미터를 반복적용하기 위해 사용된다. 예를 들어, rnorm(n=2,mean=1), rnorm(n=2,mean=2), rnorm(n=2,mean=3)… 등을 처리하는 경우를 생각해보자. for()를 쓰지 않고 map을 쓰면 다음과 같이 간단하게 처리할 수 있다. 결과값은 list이다. map(1:5,rnorm,n=2) [[1]] [1] 1.5277437 -0.1681184 [[2]] [1] 1.265389 2.071110 [[3]] [1] 2.332851 2.908670 [[4]] [1] 3.591315 2.631672 [[5]] [1] 3.874069 5.216847 이제 위의 결과값을 받아(list 형태) 평균을 계산해보자. 각각의 list에 대해 함수를 적용하고 벡터로 결과를 바꾸려면 map_dbl()을 사용한다. map(1:5,rnorm,n=2)%>%map_dbl(mean) [1] 0.3867665 1.7964589 3.7069350 4.0836371 6.1565157 잘 되었는지 확인하기 위해 숫자를 좀 더 키워보자. map(1:5,rnorm,n=10000)%>%map_dbl(mean)%>%round() [1] 1 2 3 4 5 평균이 각각 1,..,5까지 잘 나왔다. 표현에 불만이 있다면 좀더 명시적으로 처리할 수도 있다. map(1:5,function(x){rnorm(n=10000,x)})%>%map_dbl(mean)...