เรียก Mathematica มาใช้ใน R

อยากใช้ Mathematica ใน R แต่ไม่มีใครเขียน package ไว้ผมก็เลยเขียนเองมันซะเลยเรียกมันว่า WolfinR เอาไว้ใช้ในกันภายในที่ทำงานครับ

จริงอยู่อยู่ว่า Mathematica มีแพคเกจที่เรียกว่า RLink ครับแต่ก็อยากใช้มันจาก R ครับไม่มีอะไร

 

ส่งผ่านค่าจาก url เข้ามาใน shiny app

ตัวอย่างรับค่าจาก url เข้ามาใช้ใน shiny app ครับ

library(shiny)

shinyApp(
 ui = fluidPage(
 textInput("text", "Text",""),
 textInput("text2", "Text2","")
 ),
 server = function(input, output, session) {
 observe({
 query <- parseQueryString(session$clientData$url_search)
 if (!is.null(query[['text']])) {
 updateTextInput(session, "text", value = query[['text']])
 }
 if (!is.null(query[['text2']])) {
 updateTextInput(session, "text2", value = query[['text2']])
 }
 })
 }
)

ลองดูเพิ่มเติมที่ https://shiny.rstudio.com/articles/client-data.html

ใช้ .net ใน CRAN สำหรับ Windows

ใครที่อยากใช้โปรแกรมที่เขียนขึ้นเองในภาษาอื่นใน R package มันก็มีหลายวิธีครับขึ้นกับว่าเราจะเขียน wrap function มันอย่างไรแต่ถ้าคิดจะเอาไปไว้ CRAN ก็คงต้องคิดหนักหน่อยเพราะ CRAN เน้นว่าโปรแกรมอื่นที่เขียนจากภาษาอื่นมานั้นต้อง compile จาก source เท่านั้นเวลาที่มีการติดตั้ง และตัว CRAN หรือ R เองก็ไม่ค่อยถูกกับฝั่ง .net ด้วยสินั่นหมายความว่าต้องใช้ compiler อย่าง gnu gcc เท่านั้น แต่มันก็พอมีวิธีครับถ้าอยากจะเอาโปรแกรมที่เขียนหรือcompiled มาแล้วจาก .net มาใช้งาน พร้อมกับส่งไปที่ CRAN ได้และผมก็เห็นหลาย package ทำกันอย่างเช่น

https://github.com/jeroen/curl/blob/7fd8d483e5a9d9fd4716d123a855cbb2e0c17b05/tools/winlibs.R

# Build against static libraries from rwinlib
if(!file.exists("../windows/libcurl-7.51.0/include/curl/curl.h")){
 if(getRversion() < "3.3.0") setInternet2()
 download.file("https://github.com/rwinlib/libcurl/archive/v7.51.0.zip", "lib.zip", quiet = TRUE)
 dir.create("../windows", showWarnings = FALSE)
 unzip("lib.zip", exdir = "../windows")
 unlink("lib.zip")
}

อันนี้เค้ามีprebuild มาเรียบร้อยแล้ว เวลาที่ติดตั้งก็ให้มันไปโหลดมาลงเลย

ผมเองก็เขียน r packages บนวินโดว์อยู่หลายตัวสำหรับใช้ที่ทำงานครับ ไอเดียก็ทำคล้ายๆกัน แต่ทั้งหมดไม่เคยได้ส่งไป CRAN สักที และส่วนมากผมจะใส่ไว้ใน folder อย่าง ints  เวลาที่สร้างpackageครับ ที่หลังจากติดจั้งแล้วมันจะสร้าง folder แยกไว้ให้เลย

 

ปัญหาโหลด rJava ไม่ได้ (Windows)

มีหลายคนถามมาว่าอยากจะใช้ package ใน R ที่มันใช้ Java ในเครื่องที่เป็น Windowsแต่มีปัญหาว่าโหลด rJava จากคำสั่ง library(rJava) ไม่ได้ โดยมันขึ้นว่า

> library(rJava)
Error: package or namespace load failed for ‘rJava’:
 .onLoad failed in loadNamespace() for 'rJava', details:
 call: inDL(x, as.logical(local), as.logical(now), ...)
 error: unable to load shared object 'C:/Users/CAMT/Documents/R/win-library/3.4/rJava/libs/x64/rJava.dll':
 LoadLibrary failure: %1 is not a valid Win32 application.

วิธีแก้ที่ผมแนะนำไปนอกเหนือจากที่ต้องลง JDK ก็มีการเซ็ตpath ให้กับตัวแปรของระบบอย่าง JAVA_HOME ซึ่งเป็นไปได้ว่าErrorที่เกิดขึ้นนั้นเพราะยังไม่มีการเซ็ตไว้หรือไม่ก็ R มันหาไม่เจอ วิธีการเซ็ตก็เพียงพิมพ์

Sys.setenv("JAVA_HOME"=c("C:\\Program Files\\Java\\jdk1.8.0_131"))

ซึ่งในกรณีนี้ JDK มันอยู่ที่ “C:\\Program Files\\Java\\jdk1.8.0_131” หรือจะเซ็ตไปที่ JRE ก็ได้ครับ จากนั้นก็โหลด rJava ใหม่ด้วยคำสั่ง library