ããã¯ã 以åã®åºçç©ã®ç¶ãã§ãã Rã䜿çšãããããŒã«ã®äžã§èšåãããŠããå Žåã2çªç®ã«äººæ°ãããã®ã¯ãç£æ¥éçºãã§ã®äœ¿çšã®å¯èœæ§ã®åé¡ã§ããããšã¯ç§å¯ã§ã¯ãããŸããã ãRãšã¯äœãããšãã質åã¯ãåžžã«ãã·ã¢ã§ææ¡ããŠããŸãã
ãç£æ¥ãéçºã§Rã䜿çšããåŽé¢ãšå¯èœæ§ãçè§£ããŠã¿ãŸãããã
ç£æ¥çšãœãããŠã§ã¢éçºãšã¯äœã§ããïŒ
ãã®çšèªã«ãã£ãŠèª°ããèªåèªèº«ã®äœããçè§£ããããšã¯ãŸã£ããé©ãããšã§ã¯ãããŸããã ãC ++ã®ã¿ããŸãã¯ãjavaã®ã¿ãã§å§ãŸããã10幎åã®è²©å£²èšç»ãšããŒãããããæã£ãŠãããã§çµããã ããããçšèªã®æç¢ºãªå®çŸ©ããªããã°ãå
ãžé²ãããšã¯äžå¯èœã§ãã
äžæã«ç¢ºç«ãããå®çŸ©ããªãããããã®è³ªåã«çããããã«ãå€éšããã³å
éšã®åºæã®ææç©ã®çµã¿åãããããã®æŠå¿µãåéããŸãã
- 管çã®èгç¹ããã®ææç© ã ç£æ¥çšãœãããŠã§ã¢éçºïŒçµç¹ãŸãã¯ãŠãããã§ã®ãœãããŠã§ã¢éçºã®åéã§ã®å°éçãªéçšããã®äž»ãªç®çã¯ãœãããŠã§ã¢è£œåãäœæããããšã§ãã åºæ
- å
éšã¢ãŒãã£ãã¡ã¯ã ã ããŒã å
šäœãç®¡çæ¹æ³ãããŒã«ããœãããŠã§ã¢éçºæ¹æ³ã«é¢ããåæãããã«ãããç¹å®ã®æéã«æ©èœãä¿¡é Œæ§ãããã©ãŒãã³ã¹ã人éå·¥åŠã®é¢ã§å¿
èŠãªç¹æ§ãåãããœãããŠã§ã¢ãçºè¡ã§ããŸãã ãã®å®çŸ©ã¯ãDãKnutãSãMcConnellãCãWigersãMãFowlerãEãHuntãFãBrooksãCãBeckãJãSpolskyãªã©ãããŸããŸãªæå人ã®äœåã«åºã¥ããŠããŸãã
ãããŒãžã£ãŒã®èгç¹ããèŠããšãã¢ãŒãã£ãã¡ã¯ãã«ã€ããŠã¯ãã¹ãŠæç¢ºã§ãããããã°ã©ãã³ã°èšèªãšã¯ããŸãé¢ä¿ããããŸããã éåžžã«å€ãã®å
éšææç©ããããŸããããããã®å€ãã«ã€ããŠã¯ãã©ã®èšèªãéçºãããŠãããã¯é¢ä¿ãããŸããã ç¹ã«ãRã䜿çšããå Žåã¯ããæ°ã«å
¥ã/ããªãã¿ã®äžãã䜿çšã§ããŸãã
- èŠä»¶ç®¡çã·ã¹ãã ïŒæ¹æ³è«ãšããŒã«ïŒ;
- ãããžã§ã¯ã管çã·ã¹ãã ïŒæ¹æ³è«ãšããŒã«ïŒ;
- ããŒãžã§ã³ç®¡çã·ã¹ãã ;
- ãã°ãã©ãã«ãŒ
- pr
ãããã£ãŠãäž»ãªèŠæ
ã¯ä¿¡é Œæ§ã®ã³ã³ããã¹ãã§åå®åŒåã§ããŸãïŒãã³ã³ãœãŒã«ã§ã®ã€ã³ã¿ã©ã¯ãã£ããªäœæ¥ã¯24æé幎äžç¡äŒã§ãããåŠè¡ç ç©¶ã®ããã«ãã¹ãŠãæžããã®ã§ãïŒãïŒã çºèšã¯äžè¬çã«æ£ããã§ããããããã«å€ãããŒã¿ã«ãããšã å®éãRã¯çŸåšã24x7圢åŒã®ã¢ããªã±ãŒã·ã§ã³ãç°¡åãã€ãšã¬ã¬ã³ãã«äœæã§ããããã±ãŒãžãšã¢ãããŒãã®ã»ããã圢æããŠããŸãã ãããã£ãŠãéçºäžã®ãœãããŠã§ã¢ã®ä¿¡é Œæ§ã確ä¿ãããšããã¿ã¹ã¯ã§æãè峿·±ãç¹ã«çŠç¹ãåœãŠãŸãã
- ããŸããŸãªããã°ã©ãã³ã°ãã©ãã€ã ã®ãµããŒãã
- ãããã°
- éçã³ãŒãåæ;
- å®è¡æã®ãã®ã³ã°ãšåæã
- æ©èœãã¹ããšåäœãã¹ãã
- ããã±ãŒãžã³ã°ãšèªååã¢ã»ã³ããª;
- ããã¥ã¡ã³ãçæã·ã¹ãã ã
éšåçã«ããããã®ãã€ã³ãã¯é²åŸ¡ããã°ã©ãã³ã°é åãšéãªããŸãã
ãŸããRã¯ãããŒã¿æäœã®åé¡ã解決ããããã®é«ã¬ãã«èšèªã§ãããå¹
åºãå®çžŸã®ããã©ã€ãã©ãªïŒããã±ãŒãžïŒãåããŠããããšãå¿ããªãã§ãã ããã éåžžã«è€éãªã¿ã¹ã¯ã«å¯Ÿãããœãªã¥ãŒã·ã§ã³ã®å
容ã§ãããããæ°çŸè¡ã®ã³ãŒãã§æžã¿ãŸãã å€§èŠæš¡ãªãããžã§ã¯ãã®å Žåãç¬èªã®ã©ã€ãã©ãªïŒããã±ãŒãžïŒãäœæããŠã³ãŒããæ§é åã§ããããã±ãŒãžåã¡ã«ããºã ã䜿çšããããšãæãŸããã§ãã
ããŸããŸãªããã°ã©ãã³ã°ãã©ãã€ã ã®ãµããŒã
æ¢åã®ããã±ãŒãžã»ããã¯ãæ°åŠçã¢ã«ãŽãªãºã ã®èгç¹ã ãã§ãªããéçºãã©ãã€ã ã®èгç¹ã§ãbase-Rã®æ©èœãè£å®ããã³æ¡åŒµããŸãã æŽé ãããäžçãåºããŠãOOPãšé¢æ°åããã°ã©ãã³ã°ã®å®è£
ãæ¡åŒµãã2ã€ã®ããã±ãŒãžã«èšåããã®ã¯çã«ããªã£ãŠããŸãã
- ã·ã¹ãã R6ã¯ã©ã¹ã UseRäŒè°ã®ãããªã䜿çšããŠãR6ã«åºã¥ããOOPã®å®è£
ã詳ããçè§£ã§ããŸãã 2017. R6ã¯ã©ã¹ã·ã¹ãã ã ãã㪠ããããŠãã¡ããã CRANãŠã§ããµã€ãã ããã§ã¯ãæšæºã®S3ã¯ã©ã¹ã·ã¹ãã ãšæ¯èŒããããã©ãŒãã³ã¹ç¹æ§ã®æ¯èŒã«ã€ããŠèªãããšãã§ããŸãã
- æ©èœçã¢ãããŒãã lambda.rããã±ãŒãžã¯ã颿°åããã°ã©ãã³ã°ãã©ãã€ã ãå®è£
ããŠããŸãã
颿°åã¢ãããŒãã«ã€ããŠè©±ãå Žåããã€ããªãã¬ãŒã¿ãŒ%>%
ãšçµã¿åãããŠpurrr
ããã±ãŒãžã«ãã®ã¢ãããŒãã®åå¥ã®èŠçŽ ã»ãããå®è£
ãããšãå®éã«ããŒã¿åŠçã倧å¹
ã«ç°¡çŽ åããã³ä¿è·ã§ããããã«å¿
èŠãªã³ãŒãéã倧å¹
ã«åæžãããŸãã ã¯ããã«ããã®ãããã¯ã«é¢ããè¯ãã¬ããŒããèªãããšãã§ããŸãïŒ Happy R Users Purrr-ãã¥ãŒããªã¢ã«
ãããã°
ã RStudioã§ã®ãããã° ãã®èšäºã§è©³ãã説æãããŠããå€å
žçãªãããã°ããŒã«ã«å ããŠã次ã®ããŸãæçšã§ã¯ãªãããŒã«ã«èšåããŸãã
éçã³ãŒãåæ
ããã§ã¯ãã¹ãŠãéåžžã«ç°¡åã§ãã æã人æ°ã®ããããŒã«ã¯ã lintr @ CRANãŸãã¯lintr @ githubã§ãã
Lintrã¯RStudio IDEãšçµ±åãããŠãããããç¹°ãè¿ããªãããã«ã詳现ã¯LintrãšRStudioãã©ã³ãã®çµ±åã«ãããŸãã
ã©ã³ã¿ã€ã ãã®ã³ã°ããã³åæ
ãã®ã³ã°
è«ççã«éèŠãªãã€ã³ãã§ãœãããŠã§ã¢å®è¡ã®ããã»ã¹ããã°ã«èšé²ããŸããããªãŒããŒãããã远å ãããŸãããé©åãªæ¹æ³ã§ç·šæããããšã«ãããéçºãããœãããŠã§ã¢ã®ãã®åŸã®ãã¯ãã«ã«ãµããŒããæäŸããã¿ã¹ã¯ã倧å¹
ã«ç°¡çŽ åãããŸãã é«ã¬ãã«ã®Rãšã³ãŒãã®ã³ã³ãã¯ãããèãããšãåžžææå¹ãªãã®ã³ã°ã§ããããªãœãŒã¹ã®èгç¹ãããªãŒããŒãããã§ã¯ãããŸããã
ãã®ã³ã°ã¿ã¹ã¯ã«ã¯ã futile.loggerããã±ãŒãžãæã䟿å©ã§ãã log4jã®ã»ãã³ãã£ã¯ã¹ã¯å€ãã®äººã«ããç¥ãããŠãããæ°ããããšãåŠã¶å¿
èŠã¯ãããŸããã 䟿å©ã§äŸ¿å©ãªã¢ããªã³/æ¡åŒµæ©èœãããæ¬¡ã®ãã®ãéžã³ãŸãã
flog.appender(appender.tee(log_name))
ã®åœ¢åŒã®ãã¬ãŒæ§æã䜿çšãããšããã¡ã€ã«ãšã³ã³ãœãŒã«ã®äž¡æ¹ãžã®åæåºåãå«ããããšãã§ããŸããbase::paste
代ããã«ã glue::glue
ã䜿çšããŠã倿°ã®å€ãå«ãè€éãªæååãäœæããæ¹base::paste
ã¯ããã«äŸ¿å©ã§ãã ããšãã°ãæååpaste0(" FROM", ch_db$table, "WHERE ", where_string, sep=" ")
ã¯ã1ã€ã®glue(" FROM {ch_db$table} WHERE {where_string}")
ãã©ãŒãããæååglue(" FROM {ch_db$table} WHERE {where_string}")
ãŸãã ã°ã«ãŒã®ãã¯ãã«åã«ãããããŒãã«éžæã®å°å·ã1è¡ã«ãªããŸãã 詳现ã¯ãã¢ããŠã³ã¹ã°ã«ãŒ1.2.0ã«èšèŒãããŠããŸããcapture.output(fun...)
颿°ã䜿çšããŠãstdoutã®é¢æ°ã«ãã£ãŠcapture.output(fun...)
ããã¡ãã»ãŒãžã衚瀺ã§ããŸãã- ã³ãã³ããããã¯ã®å®è¡æéã衚瀺ããã«ã¯ã tictocããã±ãŒãžã®
tic()
ã toc()
颿°ã䜿çšãããšéåžžã«äŸ¿å©ã§ãã åæã«ããã®ãããªæ§é ã®åœ¢åŒã§ãã¬ãŒã«flog.info(glue("Data query response time: {capture.output(toc())}"))
颿°ãããã«å«ããŸãïŒ flog.info(glue("Data query response time: {capture.output(toc())}"))
ãªã¢ã«ã¿ã€ã æ€èšŒ
äžè¬ã«ãç¹ã«åçåä»ãã䜿çšããèšèªã§ã¯ãç¹å®ã®æ©èœã§åŠçããããã«åä¿¡ããããŒã¿ã確èªããã®ãè¯ãèŠåã§ãã è¯ãæ¹æ³ã§ã¯ãæ€èšŒã¯2ã€ã®æ®µéã«åããããã¹ãã§ãïŒç©ççãªæ€èšŒïŒå¿
èŠãªã¿ã€ãã®ããŒã¿ïŒãšè«ççãªæ€èšŒïŒæ£ããã¿ã€ãã®ããŒã¿ã®å
容ã確ç«ãããèŠä»¶ã«åŸããŸãïŒã è«ççãã§ãã¯ãå®äºããæéã¯ãç©ççãããæ¡éãã«é·ããªãå¯èœæ§ããããŸãã åºæ¬çãªäŸ-ç©ççæ€èšŒã®æ®µéã§ã¯ãæµ®åå°æ°ç¹æ°ã®ãã¯ãã«ã®å
¥åãèŠãŠãè«ççæ€èšŒã®æ®µéã§ã¯ããã¯ãã«ã®ãã¹ãŠã®èŠçŽ ãéè² ã§ããããšãããããŸãã
Rã«ã¯ãã®ããã®ãã¹ãŠããããéåžžã«è¯ãéžæããããŸãã æãè峿·±ããææãªããã±ãŒãžã«ã€ããŠã®ã¿èšåããŸãã ç©ççæ€èšŒããã³assertr
checkmate
ãè«ççvalidate
ã
assertive
ãšã¯ç°ãªãã checkmate
å®è£
checkmate
æåã«éåºŠãšæå°éã®ãªãŒããŒãããã«çŠç¹ãåãããŠããããšcheckmate
çŽ æŽãããããšã§ãã
ããã qassert
ã䜿çšããŠæ£èŠè¡šçŸã®ã¹ã¿ã€ã«ã§ã³ã³ãã¯ããªæ€èšŒã«ãŒã«ãèšè¿°ããå¯èœæ§qassert
éåžžã«æ¥œããã§ãã2è¡ããã§ãã¯ããå
žåçãªæ©èœãããã€ãã®æåã®è¡ã«æããããããšãã§ããããã§ãã
è«ççæ€èšŒã®èгç¹ãã-ããã§ã¯ã誰ãã圌ã«ãšã£ãŠäŸ¿å©ãªæ¹æ³ãéžæã§ããŸãã ããã¯ãã¹ãŠãã©ã®çš®é¡ã®ããŒã¿ãç¬ç«ããŠãŸãã¯ãã€ãã©ã€ã³ã§åŠçãããŠããããæ£ç¢ºã«äœããã§ãã¯ããå¿
èŠããããã«ãã£ãŠç°ãªããŸãã
ããã°ã©ã ããžãã¯ã«å¿
èŠãªãã®ã«å¿ããŠã TRUE/FALSE
æ¡ä»¶ãžã®æºæ ã確èªããŠããããžãã¯ãåå²ããããäŸå€ãã¹ããŒïŒã¢ãµãŒãïŒã§ããŸãã
äŸå€åŠç
äŸå€ãçæããã¡ã«ããºã ã¯ãããŒã¿ãæäœããéã«ééããªã䟿å©ã§ãããä»éããæ
å ±ã®è©³çްãªåºåã¯ãã³ã³ãœãŒã«ã§ã®ã€ã³ã¿ã©ã¯ãã£ããªäœæ¥äžã«éåžžã«åœ¹ç«ã¡ãŸãã ãã ããã¹ããªãŒãã³ã°å®è¡ã«åãæ¿ããå Žåããšã©ãŒãçºçãããšãã«ããã°ã©ã ã忢ããããšã¯ãŸã£ããäžèŠã§ããããã³ãã©ãŒã®äœææã«èšºæã¡ãã»ãŒãžãçæããããŸããŸãªæ¹æ³ãç²ãå§ããŸãã
éåžžã®tryCatch
ã¡ã«ããºã ã䜿çšããäŸå€åŠçã«ã€ããŠã¯ã Advanced Rã§tryCatch
説æãããŠããŸãã ããã°ã©ã ã¢ãŒãã§ã®ããŒã¿åŠçã«é¢ããŠãããè峿·±ãæçšãªã®ã¯ã次ã®2ã€ã®æ¡åŒµæ©èœã§ãã
- ãã€ãã©ã€ã³ïŒãã€ïŒã忢ããã«äŸå€ãåŠçããŸãã
- 颿°ããã®å¿çã®çµ±åã
ãããã®é¢æ°ã¯äž¡æ¹ãšãã颿°ã®purrr
ãã¡ããªã«ãã£ãŠpurrr
ããã±ãŒãžã«å®è£
ãããŠããŸãã ãšã©ãŒ/çµæãã£ãŒã«ããå«ãæšæºåããããªã¹ãã颿°ããååŸãããšãã¹ããªãŒã åŠçãäžæããããã€ãã©ã€ã³ã®å®äºåŸã«çºçããäŸå€ãšãšã©ãŒãåŠçã§ããŸãã ãã¯ãã«åŠçäžã«0ã«ããé€ç®ãçºçããå Žåãåžžã«ãã«ã鳎ãããŠäŸå€ãçºçãããå¿
èŠã¯ãŸã£ãããªããäžæ£ãªèŠçŽ ã«ããŒã¯ãä»ããŠæ¬¡ãžé²ãã ãã§ååã§ãã ãã®ãããªäŸå€åŠçã®ã«ãã»ã«åã«ãããæ°åè¡ã®ã³ãŒãã®ä»£ããã«ãããŒã¿ãåŠçãããšãã«äºæããªãç¶æ³ãèæ
®ããããã«èšèšããããã¹ãŠã1ã€ã®ã©ãããŒã«æžããããšãã§ããŸãã ã³ãŒãã®åæžãé床ã®å€åã®äœæž-ããå®å®ããçµæã
safely
ã«äœ¿çšããå¯èœæ§ã«ã€ããŠã¯ãRStudioããã°ïŒ Hadley Wickham +ããã¥ã¡ã³ããŒã·ã§ã³ã«ããpurrr 0.2.0ïŒã§ç°¡æœãã€ç°¡æœã«èª¬æãããŠããŸãã
æ©èœãã¹ããšåäœãã¹ã
testthat
ããã±ãŒãžãtestthat
ãŸãã ãtestthatïŒå
¥éããšããèšäºããç ç©¶ãéå§ã ãCRANãšHadley Wickhamã®æ¬ãããã³ãTesting R Codeãã®æ¬ãç¶ããããšãã§ããŸãã äžèšã®èŠå®ãèãããšã颿°ãassertive
ããcheckmate
ããã±ãŒãžã®é¢æ°ã«èªã¿èŸŒããšãã«ç§»è¡ããŸãã èªåãã¹ãã¯ãããã±ãŒãžãšåã
ã®æ©èœã®äž¡æ¹ã«ã€ããŠèšè¿°ã§ããŸãã
ããã±ãŒãžã³ã°ãšèªååãããã¢ã»ã³ããª
ç§ãã¡ã¯åã«ååšãããã誰ããããã«ã€ããŠç¥ã£ãŠããããã§ã¯ãªããšè¿°ã¹ãŠããŸãã ã¢ã»ã³ããªãæ€èšŒãããã¥ã¡ã³ãåãæ€èšŒãªã©ã¯ãã¹ãŠãRStudio IDEã«ãã£ãŠçµ±åãããŠããŸãã èšäºãããã±ãŒãžã®æ§ç¯ããã¹ããé
åžãã§ç°¡åã«èª¬æãããŠããŸãã ãã¹ãŠã¯ãåªããHadley Wickhamã®æ¬ãR packagesãã«è©³ãã説æãããŠããŸã ã usethis
ãã«ããŒããã±ãŒãžusethis
ãããšusethis
å Žåãããusethis
ç¹å®ã®ã¢ããªã±ãŒã·ã§ã³ã«å¿
èŠãªããã±ãŒãžã®ã¹ãããã·ã§ãããäœæã§ããpackrat
ããã±ãŒãžããããŸãã ããã«ãããã·ã¹ãã ã«ã€ã³ã¹ããŒã«ãããŠããããã±ãŒãžãããœãããŠã§ã¢æ©èœç°å¢ãç¬ç«ãããããšãã§ããŸãã
ããã¥ã¡ã³ãçæã·ã¹ãã
ããã±ãŒãžã§å©çšã§ãããã®ãåã«èšèŒããŠããŸããã誰ããããã«ã€ããŠç¥ã£ãŠããããã§ã¯ãããŸããã roxygenã«åºã¥ããŠæ§ç¯ãããRStudio IDEãšçµ±åãããŠããŸãã
ãã¹ãŠã¯ãåªããHadley Wickhamã®æ¬ãR packagesãã«è©³ãã説æãããŠããŸã ã
ãããã«
çŸåšãRã¯éåžžã«ç©æ¥µçã«éçºããŠããŸãã æ¯é±ãæ°ãã䟿å©ãªæ©èœãããã±ãŒãžãã¢ãããŒãããŸãã¯æ¢åã®ãã®ãæ¹åãããŸãã ããŒã¿åŠçã«é¢é£ããã¿ã¹ã¯ã®å Žåããããªã±ãŒã·ã§ã³ã«ç€ºãããŠããããã±ãŒãžã®ã»ããã«ãããé«éã§å®å®ããã³ã³ãã¯ããªäºæž¬å¯èœãªã³ãŒããRã«æžã蟌ãããšãã§ããŸãã 1幎åããããã®ããã±ãŒãžã¯å°ãªãã£ãã®ã§ã2018幎æ«ã«ãªããŸã-æéã¯ããããŸãã
ãã®ãããªç¶æ³ã§ã¯ã2幎以äžåã®ããŒã¿ã«åºã¥ããŠèšèªãšãã©ãããã©ãŒã ã䜿çšããå¯èœæ§ãŸãã¯äžå¯èœæ§ã«ã€ããŠçµè«ãåºãããšã¯æ£ãããããŸããã å°ãªããšããçŸåšã®ç¶æ
ã«æ
£ããå¿
èŠããããŸãã
é床ã«ã€ããŠã¯ããã€ãã®ããã«ããã®è³ªåã¯çžå¯Ÿçã§ãã 2æ¥éã®éçº+ Rã§ã®å®è¡ã«10ç§ã¯ã2é±éã®éçº+ Javaã§ã®å®è¡ã«0.1ç§ããã¯ããã«çãã§ãã é床ã¯ã³ã³ããã¹ãã§è°è«ããå¿
èŠããããŸãã é«éå®è¡ãå¿
èŠãšãã颿°ã®å Žåã Rcppããã±ãŒãžãé©çšããããšã«ãããRã®å¢çãè¶ããã«C ++ã§å®è£
ã§ããŸãã æ©èœã®ç°¡åãªæŠèŠã¯ãèè
ã®èšäºã®1ã€ãRãC ++ã§æ¡åŒµããïŒRcppã®ç°¡åãªç޹ä»ãã«ãèšèŒãããŠããŸãã
åéããèŠèŠåãŸã§ãããŸããŸãªããŒã¿åŠçã®ããã®ã¿ã¹ã¯ãå¢ããŠããŸãã Rã«æ³šç®ããŠã¿ãŸãããïŒ
åã®åºçç©- ãRãã¢ã¹ã¿ãªã¹ã¯ããã³ã¯ãŒãããŒãã ã