Category: R

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 ได้เลยครับ    

ปัญหา ‘\r\n’ สำหรับ R บนวินโดว์

พอดีว่าเขียนโปรแกรม(ภาษา R)เพื่ออ่านค่า input ที่เป็น string จากไฟล์ แต่เจอปัญหาที่ eval  ของ R ไม่สามรถ run ได้ นั่นก็คือตัว ‘\r\n\r\n’ ซึ่งมันก็คือการขึ้นบันทัดใหม่จาก text file ที่สร้างบนวินโดว์ (Windows CR LF) ทำให้ต้องกลับไปสร้างแบบ Unix (LF) แทน หรือไม่ก็ต้องลบ \r ออก มีการคุยเรื่องนี้ที่ https://stackoverflow.com/questions/1761051/difference-between-n-and-r      

เอาสักดอกไหม

จาก http://www.sakngoi.com/2015/10/30/สมการดอกกุหลาบ/ library(misc3d) rose <- function(x,theta,axis) { phi <- (pi/2)*exp(-theta/(8*pi)) X <- 1-(1/2)*((5/4)*(1- ((3.6 * theta) %% (2*pi))/pi)^2-1/4)^2 y <- 1.95653* x*x * (1.27689 *x-1)^2 * sin(phi) r <- X*(x *sin(phi)+y*cos(phi)) out<-switch(axis, x={ r*sin(theta) }, y={ r*cos(theta) }, z={ (X*(x* cos(phi)-y* sin(phi))) } ) return(out) } parametric3d( fx = function(u,v) rose(u,v,axis="x"), fy = function(u,v) rose(u,v,axis="y"), fz

หา drive ของ USB drive

ทีมที่ต้องไปนำเสนองานเพื่อขอเงินล้านทีมหนึ่งต้องการใช้ Shiny ขอมาว่าให้ช่วยหน่อย โดยที่มีความต้องการว่าไม่ต้องการให้มีเซ็ตหรือเปิดอะไรยุ่งยากเพียงแค่ เสียบ USB drive ในเครื่องลูกค้าซึ่งเป็น Windows แล้ว double click อะไรก็แล้ว ให้ตัว Shiny app ก็เปิดขึ้นมาเลย ผมเลยบอกว่าได้ง่ายมาก เลี้ยงก๋วยเตี๋ยวผมก่อนชามหนึ่งเดี๋ยวเขียนscript ง่ายๆให้ เวลาใช้ก็เพียง double click ที่ icon ของ batch file นี้ วิธีที่ผมทำนั้นมันง่ายจริงๆครับ เพียงเขียน batch file หาว่า drive ที่เข้าเสียบนั้นอยู่ drive อะไรก่อน จากนั้นก็เพียง set ค่าพารามิเตอร์ที่ rstudio ต้องการใช้ในการหา R  และก็แก้ script นิดหน่อยให้ R มันโหลดตัว app เลย อันนี้เป็นตัวอย่างโค้ด batch file ที่ใช้หา