Categories
R

เปลี่ยนรูปแบบของตัวเลขเป็นแบบ 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 <- gsub("e", "%*%10^", l)
 # return this as an expression
 parse(text=l)
}

เอาไปใช้งาน

library(ggplot2) 
library(scale)
 ggplot(data=df, aes(x=x, y=y)) +
 geom_point() +
 scale_y_continuous(labels=fancy_scientific)

 

 

Categories
Mathematica R

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

บ่น ๆๆ ตัว Shiny เวลาที่วาดกราฟด้วย ggplot2 มันค่อนข้างช้าพอสมควร

ยิ่งถ้ามี function ที่ต้องคำนวณให้ได้ข้อมูลก่อนมาวาดกราฟนี่ยิ่งหนักเลย

สุดท้ายก็ต้องกลับมาที่ CDF ของ Mathematica เฮ้ออออ …

ตัวอย่างข้างล่างนี้ทุกครั้งที่เปลี่ยน index จะมีการคำนวณผลลัพธ์แบบ real time เลยไม่ใช่การเอาผลลัพธ์ที่ได้มาวาดเฉยๆนะครับ แล้วลองสังเกตุความเร็ว  ถ้าเทียบกับ R/Shiny นี่คนล่ะเรื่องเลย

 

ส่วนอันนี้อีกตัวอย่างที่เอามาไว้โชว์ดูข้อมูลเฉยๆ  ถ้าเห็น code ที่เขียนแล้วจะตกใจเพราะไม่กี่บรรทัดเอง

เสียดายที่ภาษา Wolfram หรือ Mathematica นี่ไม่ค่อยเป็นกระแสสักเท่าไหร่ในบ้านเรา ถึงแม้จะสามารถใช้ได้ฟรีใน Raspberry Pi

ส่วนตัวคิดว่าน่าจะเอามาใช้สอนเด็กของไทยเรามาก

Categories
R

สีหน้าใน 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

Categories
R

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

มีคนถามมาว่าช่วยทำตัวอย่างการใช้ Shiny กับแพ็คเกจ maemod ให้ดูหน่อย

ผมทำเป็นตัวอย่างง่ายๆให้ดูแล้วครับที่ https://github.com/slphyx/maemod/tree/master/inst/examples/shiny

อยากทดลองเล่นก็ลง maemod ก่อนหลังจากนั้นก็โหลดตัวอย่างไฟล์ที่ให้ไว้ใน link ทั้งสามไฟล์ โดยเก็บไว้ที่เดียวกัน จากนั้นก็เปิดไฟล์ ui.R หรือ server.R ใน rstudio แล้วก็ click ที่ปุ่ม Run App ได้เลยครับ

หลักการก็มีว่า สร้างตัว function ที่ส่งผ่านค่า parameters ครอบ maemod.ode อีกทีครับ จากนั้นก็เรียก function นี้จากในตัว server.R แล้วส่ง ค่าparameters แบบ reactive กลับเข้าไปที่ function ดูตัวอย่างจากในไฟล์ที่ทำเป็นตัวอย่างครับ

Categories
R

ปัญหา ‘\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

 

 

 

Categories
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 = function(u,v) rose(u,v,axis="z"),
 umin = 0,umax = 1,vmin = -2 *pi,vmax = 15*pi,
 screen=list(x=25,y=576),n=100, color = "red")


 

Categories
IT R

หา 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 ที่ใช้หา USB drive ที่ชื่อว่า MONEY ครับ  ไอเดียก็มีว่าใช้ wmic เขียนว่าUSB drive นั้นdrive อะไรแล้วเขียนลงไฟล์ชื่อ wmic.txt จากนั้นก็เปิดไฟล์ wmic.txt อ่าน พร้อมกับเช็ตตัวแปรชื่อ USBDrive จากนั้นก็เอาไปทำอะไรที่เราต้องการได้ครับ ซึ่งตัวอย่างนี้ผมก็เอาไปเปิดไฟล์ที่ slphyx.dat โชว์บน screen ครับ

wmic LOGICALDISK where volumename="MONEY" get deviceID > wmic.txt
for /f "skip=1" %%b IN ('type wmic.txt') DO (set "USBDrive=%%b")
type %USBDrive%\practices\slphyx.dat

 

ส่วนใครที่อยากรู้ว่าเกิดอะไรขึ้นหลังจากที่เราเรียกใช้ R ก็ดูตามนี้เลยครับ

เครดิต: https://twitter.com/thomasp85

 

เพิ่มเติม  https://rviews.rstudio.com/2017/04/19/r-for-enterprise-understanding-r-s-startup/

https://cran.r-project.org/web/packages/startup/vignettes/startup-intro.html

Categories
R

แบ่งคำ/ตัดคำ ภาษาไทยใน R ด้วย SWATH

โปรแกรมที่ช่วยในการแบ่งคำหรือตัดคำภาษาไทยที่น่าสนใจอีกตัวหนึ่งนอกเหนือจาก LexTo (http://www.sansarn.com/lexto/) ก็มี SWATH (https://linux.thai.net/projects/swath) ครับ

SWATH มีความสามารถที่จะใช้ตัดคำภาษาไทยที่อยู่ในหลาย file format ครับไม่ว่าจะเป็น LaTex, HTML, RTF หรือ plain text  แต่การใช้งานต้องใช้ในแบบ command line ไม่มี GUI ครับ โดย swath จะมี options ต่างให้

เพื่อความสะดวกเอาไปใช้ใน R บน Windows ผมเลยเขียน packageเพื่อเรียกใช้งาน SWATH แบบง่ายๆไว้ที่ https://github.com/slphyx/RSwath หรือดูเพิ่มเติมที่ http://www.sakngoi.com/2018/01/23/rswath-the-r-interface-to-swath/

การใช้งานก็เริ่งจากติดตั้งจาก github ด้วยคำสั่ง

library("devtools")
install_github("slphyx/RSwath")

จากนั้นก็เรียกใช้งาน

library("RSwath")

การใช้งานกับไฟล์ข้อความที่เป็นภาษาไทยที่ต้องการแบ่งสมมุติว่าชื่อ testTH.txt แล้วต้องการให้ไฟล์ที่แบ่งคำแล้วด้วย SWATH ชื่อ testTHX.txt ก็เพียงพิมพ์

rswath(inputfile="testTH.txt",outputfile="testTHX.txt")

ตัวอย่างไฟล์ที่ใช้กับswathกับผลลัพธ์ที่ได้

 

Categories
R

RSwath: The R Interface to SWATH

RSwath: The R Interface to Swath ผมเอา SWATH (https://code.google.com/archive/p/swath/) มาทำเป็น r-package สำหรับใช้ใน R บน Windows ครับ

ตอนนี้มันยังเป็นรุ่นเก่าอยู่ (swath 0.3.4) ครับ

SWATH ก็เป็นตัวแบ่งคำภาษาไทยอีกตัวหนึ่งที่พัฒนาโดยท่าน Phaisarn Charoenpornsawat และท่าน Theppitak Karoonboonyanan ครับ
สนใจใช้งานก็ไปที่ https://github.com/slphyx/RSwath

การใช้งานก็เริ่มจากติดตั้งจาก github ด้วยคำสั่ง

library("devtools")
install_github("slphyx/RSwath")

จากนั้นก็เรียกใช้งาน

library("RSwath")

การใช้งานกับไฟล์ข้อความที่เป็นภาษาไทยที่ต้องการแบ่งสมมุติว่าชื่อ testTH.txt แล้วต้องการให้ไฟล์ที่แบ่งคำแล้วด้วย SWATH ชื่อ testTHX.txt ก็เพียงพิมพ์

rswath(inputfile="testTH.txt",outputfile="testTHX.txt")

ตัวอย่างไฟล์ที่ใช้กับswathกับผลลัพธ์ที่ได้

 

 

 

 

Categories
R

tidy data

ถ้าจะทำให้ชีวิตง่ายขึ้นในการใช้ ggplot2 ให้เปลี่ยนรูปแบบ data ที่ใช้เป็นแบบ tidy data ครับ

เอามาจาก http://r4ds.had.co.nz/tidy-data.html

หรืออ่านเพิ่มเติมได้จาก http://vita.had.co.nz/papers/tidy-data.html