ไปเจอมา ขำดี แต่มันก็จริงนะครับ 555
Computational scientists solve tomorrow’s problems with yesterday’s computers; computer scientists seem to do it the other way around.
– anonymous
สักงอย ดอท คอม
ไปเจอมา ขำดี แต่มันก็จริงนะครับ 555
Computational scientists solve tomorrow’s problems with yesterday’s computers; computer scientists seem to do it the other way around.
– anonymous
You can download SIPA Thai fonts from http://www.f0nt.com/author/sipa/. But If you would like to download just only one zip file that has all of them, click Here.
ทีมที่ต้องไปนำเสนองานเพื่อขอเงินล้านทีมหนึ่งต้องการใช้ 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
ผมเอา code LexTo เค้ามาลองเขียนเล่นสำหรับใช้งานแบบ offline บน Windows (7, 8 และ 10)ครับ
สนใจdownload ได้ที่นี่ครับ
ที่download มันจะเป็นไฟล์ zip ที่มีตัวโปรแกรมชื่อ Araiwa.exe กับไฟล์ dictionary ชื่อ lexitron.txt พร้อมกับไฟล์ araiwadll.dll ก็ให้แตกไฟล์ zip นี้ออก แล้วdouble click ที่ไฟล์ Araiwa.exe ได้เลยครับ
ส่วนใครที่อยากใช้มันใน R ผมเขียนเป็นpackage เรียกมันว่า araiwa ครับ ดูเพิ่มเติมได้ที่ https://github.com/slphyx/Araiwa
ตัวอย่างการใช้งาน mono + Rdotnet บนระบบ Rocks cluster ครับ
เวอร์ชั่น Rocks cluster ที่ผมใช้คือ 6.2 ครับ การติดตั้งก็แบบเดิมๆเลยตามที่อธิบายในเอกสารบนเวบของ Rocks เลย ไม่มีอะไรพิเศษ จากนั้นก็ผมก็ yum ติดตั้ง mono จาก https://copr.fedorainfracloud.org/coprs/tpokorra/mono-opt/ โดยในเวอร์ชั่นนี้ mono จะถูกติดตั้งไว้ที่ /opt/mono และก็ yum ติดตั้ง R ซึ่ง R จะถูกติดตั้งไว้ที่ /usr/lib64/R ของ head node ครับ
หลังจากที่ติดตั้ง mono และ R เรียบร้อยแล้วก็เอา code ของ C# ที่เขียนสำหรับเรียกใช้งาน rdotnet บวกกับก็อปปี้ไฟล์แอสเซมบลีของ Rdotnet ต่างๆมาไว้ใน folder ที่ต้องการก่อนทำการคอมไพล์ครับ โดยไฟล์ต่างๆของ Rdotnet ก็มีอย่างเช่น DynamicInterop.dll, RDotNet.dll, RDotNet.NativeLibrary.dll
ก่อนคอมไพล์หรือเรียกใช้งาน mono เราก็ต้องโหลดenviroment ต่างๆของ mono ก่อน โดยการพิมพ์
$ . /opt/mono/env.sh
ซึ่งมันก็คือเซ็ตpath ต่างๆของตัวแปรอย่าง LD_LIBRARY_PATH กับ PKG_CONFIG_PATH ครับ
export PATH=/opt/mono/bin:$PATH
export LD_LIBRARY_PATH=/opt/mono/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/opt/mono/lib/pkgconfig:$PKG_CONFIG_PATH
จากนั้นก็ export ค่า R_HOME ไปยัง path ของ R ที่ติดตั้งแล้ว
$ export R_HOME = “/usr/lib64/R”
อันนี้เป็นตัวอย่าง code ที่ผมก็อปปี้มาจากเวบของ RDotnet ครับ สำหรับเรียก R มาเพื่อทำ t-test ของเลข 2 ชุดครับ
#testRDotNet.cs using System; using System.Linq; using RDotNet; namespace Sample1 { class Program { static void Main(string[] args) { REngine.SetEnvironmentVariables(); REngine engine = REngine.GetInstance(); // REngine requires explicit initialization. // You can set some parameters. engine.Initialize(); // .NET Framework array to R vector. NumericVector group1 = engine.CreateNumericVector(new double[] { 30.02, 29.99, 30.11, 29.97, 30.01, 29.99 }); engine.SetSymbol("group1", group1); // Direct parsing from R script. NumericVector group2 = engine.Evaluate("group2 <- c(29.89, 29.93, 29.72, 29.98, 30.02, 29.98)").AsNumeric(); // Test difference of mean and get the P-value. GenericVector testResult = engine.Evaluate("t.test(group1, group2)").AsList(); double p = testResult["p.value"].AsNumeric().First(); Console.WriteLine("Group1: [{0}]", string.Join(", ", group1)); Console.WriteLine("Group2: [{0}]", string.Join(", ", group2)); Console.WriteLine("P-value = {0:0.000}", p); // you should always dispose of the REngine properly. // After disposing of the engine, you cannot reinitialize nor reuse it engine.Dispose(); } } }
เวลาคอมไพล์ก็เพียงพิมพ์
$ mcs /reference:RDotNet.dll /reference:RDotNet.NativeLibrary.dll /reference:DynamicInterop.dll testRDotNet.cs
ซึ่งคำสั่ง mcs นี้จะแปลงไฟล์ .cs ของเราให้เป็น binary ไฟล์ที่คอมพิวเตอร์จะเข้าใจได้ 🙂 ครับ ซึ่งในที่นี้มันจะสร้างไฟล์ชื่อ testRDotNet.exe ให้ครับ ส่วนoption ของคำสั่ง /reference เป็นการบอกว่าเราเรียกใช้ namespace จากไฟล์แอสเซมบลี่อะไรบ้าง
วิธีการรันไฟล์ exe ที่ได้จาก mcs ก็เพียงพิมพ์ mono แล้วตามด้วยไฟล์ exe ครับ เช่น
$ mono testRDotNet.exe
Welch Two Sample t-test data: group1 and group2 t = 1.959, df = 7.0306, p-value = 0.09077 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -0.01956909 0.20956909 sample estimates: mean of x mean of y 30.015 29.920 Group1: [30.02, 29.99, 30.11, 29.97, 30.01, 29.99] Group2: [29.89, 29.93, 29.72, 29.98, 30.02, 29.98] P-value = 0.091