Category: R

RcppGSL บน Windows 10

ใครที่จะใช้ RcppGSL บน Windows 10 อาจจะมีเรื่องที่ต้องทำความเข้าใจหน่อยนะครับ มีคนถามผมมาว่ามันเซ็ตอย่างไร เพราะลองเอา code ตัวอย่าง มาใช้แล้วก็ยังไม่ผ่านสักที และดูเหมือนว่าคนถามผมเองยังสับสนและไม่เข้าอยู่เล็กน้อย  เล่าคร่าวๆ ก่อนนะครับ เจ้า GSL หรือ GNU Scientific library เนี้ยเป็นlibraryที่รวบรวมคำสั่งหรือ functions ที่ใช้กันมากในวงการคณิตศาสตร์และฟิสิกส์ มันถูกเขียนขึ้นด้วยภาษา C โดยกลุ่มนักฟิสิกส์และแจกจ่ายให้ใช้กันได้ฟรีครับ ที่นี่มันก็มีคนอยากใช้งานจาก GSL นี้ใน R ก็เลยมีคนเขียน package ขึ้นมากันหลายตัว และ  RcppGSL ก็เป็นหนึ่งในนั้น เจ้า RcppGSL นี้ถ้าเราจะใช้มันเนี้ย เราต้องมี GSL ติดตั้งให้เรียบร้อยก่อน (เดี๋ยวบอกอีกทีว่าทำอย่างไรครับ) โดยที่เราจะต้องเซ็ตพารามิเตอร์สำหรับ Windows ที่ชื่อว่า LIB_GSL ไปยัง path ของ GSL ที่ติดตั้งไว้ครับ อย่างเช่นผมติดตั้งไว้ที่ D:\Data-Work\Programs\gsl\gsl_2.5 ผมก็เพียงเพิ่มเข้าใน environment

Rcpp::sourceCpp กับปัญหา -Wunused-variable

ใครที่ใช้ sourceCpp สำหรับ compile โค้ดของ Rcpp แล้วเจอปัญหา unsed-variable แล้วอยากที่จะ  ignore มัน ก็สามารถทำได้ด้วยการสร้างไฟล์ Makevars ที่มีบรรทัดนี้ครับ CXXFLAGS += -O3 -Wall -pipe -Wno-unused หรือไม่ก็แก้ไขไฟล์ Makeconf ที่ R_HOME/bin/R_ARCH (ไม่ค่อยแนะนำ) โดยเพิ่ม -O3 -Wall -pipe -Wno-unused  ในส่วนของ CXXFLAGS  ครับ    

ปัญหา unlock_solver จาก แพ็คเกจ deSolve

ถ้าใครที่เจอปัญหา unlock solver ตอนที่ใช้คำสั่งพวก ode solver จาก แพ็คเกจ deSolve เช่น Error in .C(“unlock_solver”) : “unlock_solver” not resolved from current namespace (deSolve)   ให้ลองแก้ปัญหาโดยโหลด deSolve ด้วยคำสั่งนี้แทนครับ library.dynam.unload(“deSolve”, libpath=paste(.libPaths()[1], “//deSolve”, sep=””)) library.dynam(“deSolve”, package=”deSolve”, lib.loc=.libPaths()[1])   หรือไม่ก็ลองโหลด deSolve ก่อนที่จะเรียกใช้งานพวก shared library (.dll, .so) ครับ      

a simple SIR simulation

ผมเขียน shiny app ง่ายๆเอาไว้สอนเรื่องโมเดลโรคระบาดแบบง่ายๆที่เรียกว่า SIR ครับ code สามารถดูได้ที่ https://github.com/slphyx/HatGame 

ใช้งาน gcc ที่มากับ Rtools ใน Mathematica

ใน Rtools จะมี compiler ของ gcc (mingw) มาด้วยแล้วทั้งที่เป็นแบบ 32 bits และ 64 bits หากอยากจะเอาไปใช้ใน Mathematica ก็ต้องเรียกผ่าน CCompilerDriver`GenericCCompiler` ครับ แล้วเพียงเซ็ต Path ของ gcc จาก Rtools นี้ให้ถูก เช่น Needs["CCompilerDriver`GenericCCompiler`"] ทดลองเรียกใช้งาน greeter = CreateExecutable[StringJoin[ "#include <stdio.h>\n", "int main(){\n", " printf(\"Hello MinGW-w64 world.\\n\");\n", "}\n"], "helloworld", "Compiler" -> GenericCCompiler, "CompilerInstallation" -> "C:/Rtools/mingw_64", "CompilerName" -> "x86_64-w64-mingw32-gcc.exe"] Import["!\""<>greeter<>"\"","Text"] Hello MinGW-w64 world. ที่นี้ถ้าอยากจะให้

Inkscape กับ ggplot

เสียเวลาพอสมควรที่ต้องมาคอยจัดระยะห่างในเอกสารโดยเฉพาะกราฟต่างๆที่ต้องนำมาวางให้อยู่ด้วยกันเป็น grid หรือตาราง โดยใน R นั้นคำสั่งที่ผมใช้เยอะก็พวก คำสั่ง plot_grid หรือแม้แต่ option ของ ggplot อย่าง plot.margin นั้นบางที่มันก็ทำให้กะขนาดเอายากพอสมควร นี่ยังไม่รวมเรื่อง scale หรือขนาดของ fonts อีก …. โอย…. วิธีที่พอช่วยเรื่องพวกนี้ได้บ้างก็คือ หลังจากที่ export เป็น pdf ของกราฟที่ต้องการจาก plot_grid แล้วก็อาศัย Inkscape มาช่วยในการขยับกราฟให้อยู่ในตำแหน่งที่ต้องการ วิธีการก็แสนจะง่าย เพียงแค่เปิดไฟล์ pdf ใน Inkscape จากนั้นก็ click หรือลากกราฟที่จะย้าย หรือจะเพิ่มเติมอะไรลงไปเลยยังได้ แนะนำให้ติดตั้ง Inkscape ไว้ที่เครื่องครับ อีกตัวก็เป็น sumatra pdf ครับมันจะเร็วดีครับในการเปิดเอกสาร pdf แต่จะแก้ไขเพิ่มเติมอะไรไม่ได้ครับ  

เปลี่ยนรูปแบบของตัวเลขเป็นแบบ m*10^n บนแกน ใน ggplot

มีตัวอย่างที่ code ที่นำมาใช้ได้ที่ https://groups.google.com/forum/#!topic/ggplot2/a_xhMoQyxZ4 (โดย Brian Diggs) fancy_scientific <- function(l) { # turn in to character string in scientific notation l <- format(l, scientific = TRUE) l <- gsub("0e\\+00","0",l) # quote the part before the exponent to keep all the digits l <- gsub("^(.*)e", "'\\1'e", l) # turn the 'e+' into plotmath format l <-

จาก Shiny สุดท้ายกลับมา CDF

บ่น ๆๆ ตัว Shiny เวลาที่วาดกราฟด้วย ggplot2 มันค่อนข้างช้าพอสมควร ยิ่งถ้ามี function ที่ต้องคำนวณให้ได้ข้อมูลก่อนมาวาดกราฟนี่ยิ่งหนักเลย สุดท้ายก็ต้องกลับมาที่ CDF ของ Mathematica เฮ้ออออ … ตัวอย่างข้างล่างนี้ทุกครั้งที่เปลี่ยน index จะมีการคำนวณผลลัพธ์แบบ real time เลยไม่ใช่การเอาผลลัพธ์ที่ได้มาวาดเฉยๆนะครับ แล้วลองสังเกตุความเร็ว  ถ้าเทียบกับ R/Shiny นี่คนล่ะเรื่องเลย   ส่วนอันนี้อีกตัวอย่างที่เอามาไว้โชว์ดูข้อมูลเฉยๆ  ถ้าเห็น code ที่เขียนแล้วจะตกใจเพราะไม่กี่บรรทัดเอง เสียดายที่ภาษา Wolfram หรือ Mathematica นี่ไม่ค่อยเป็นกระแสสักเท่าไหร่ในบ้านเรา ถึงแม้จะสามารถใช้ได้ฟรีใน Raspberry Pi ส่วนตัวคิดว่าน่าจะเอามาใช้สอนเด็กของไทยเรามาก

สีหน้าใน R

ทดสอบ FaceExp  แพ็คเกจ สำหรับหาสีหน้าของคนในรูป  เปิดทดสอบชั่วคราว1 เม.ย ลบครับ(อาจลบก่อนหน้านั้น)  สนใจทดสอบ โหลดได้ที่ https://1drv.ms/u/s!AjSk65t7m_UYiJ1TFDzPtw6hdZJj_g วิธีการติดตั้งก็โหลด ไฟล์ zip ในLink แล้วพิมพ์ install.packages(file.choose(), repos = NULL, type="source") แล้วเลือกไฟล์ที่โหลดมาครับ คำสั่งหลักคือ faceExp(pic.url)  โดยที่ pic.url คือ url ของภาพครับ นั่นหมายความว่าถ้าอยากทดสอบแพ็คเกจนี้ต้องนำรูปโหลดไปไว้ที่ใดก่อน จากนั้นก็นำ url มาใส่ในคำสั่งนี้ได้เลยครับ โดยสีหน้าที่มีคือ happiness, disgust, sadness, neutral, anger, fear, surprise

ตัวอย่างการใช้ Shiny กับ Maemod

มีคนถามมาว่าช่วยทำตัวอย่างการใช้ Shiny กับแพ็คเกจ maemod ให้ดูหน่อย ผมทำเป็นตัวอย่างง่ายๆให้ดูแล้วครับที่ https://github.com/slphyx/maemod/tree/master/inst/examples/shiny อยากทดลองเล่นก็ลง maemod ก่อนหลังจากนั้นก็โหลดตัวอย่างไฟล์ที่ให้ไว้ใน link ทั้งสามไฟล์ โดยเก็บไว้ที่เดียวกัน จากนั้นก็เปิดไฟล์ ui.R หรือ server.R ใน rstudio แล้วก็ click ที่ปุ่ม Run App ได้เลยครับ