2013-07-15 21 views
36

Tôi đang làm việc trên một dự án yêu cầu một số mã R để chạy cho một số phân tích dữ liệu. Dự án chủ yếu trong JavaScript và tôi cần một cách để chạy mã R từ JS. Nghiên cứu của tôi đã không tìm thấy bất kỳ cách nào tốt để làm điều đó được nêu ra. Có cách nào để làm như vậy không?Có cách nào để chạy mã R từ JavaScript?

Ngoài ra, tôi không có kinh nghiệm với R (một người khác đang cung cấp mã R).

+0

Bạn có sử dụng IE hoặc các trình duyệt khác ? Internet Explorer không có một cơ chế để kịch bản Windows từ javascript, nhưng bạn sẽ phải điều chỉnh cài đặt bảo mật của bạn .... sau đó sử dụng 'Rscript.exe' bạn có thể chạy 'yourScript.R' như thế này' var shell = new ActiveXObject (' WScript.Shell '); shell .Run ("Rscript yourScript.R arg1"); ' – agstudy

+0

Hiện tại, tôi đang phát triển trong Chrome. Tôi không nghĩ rằng tôi sẽ dễ dàng có thể chuyển đổi. –

+0

Đây là Javascript * trên trình duyệt * phải không? Điều này là dành cho một khách hàng web? Điều này quan trọng, bởi vì những ngày này JS không chỉ là một ngôn ngữ máy khách web, và có thể chạy như một ngôn ngữ hoàn toàn đặc quyền (xem node.js) trên một máy cũng như một ngôn ngữ sandbox trong một trình duyệt web. – Spacedman

Trả lời

19

Nếu bạn đồng ý với việc mã R chạy trên máy chủ, thì bạn nên xem OpenCPU. Nó cung cấp một API REST và thư viện JavaScript tương ứng để gửi mã R tới máy chủ và nhận lại kết quả. Đặc biệt, nó sẽ chăm sóc các vấn đề bảo mật có thể phát sinh khi chạy R như một máy chủ (mã R có thể chạy các lệnh shell tùy ý, trong số những thứ khác). Có các trường hợp bản demo công khai mà bạn có thể sử dụng để dùng thử và this page cung cấp một hướng dẫn đơn giản.

11

Làm thế nào về R-node?

Tôi nghĩ phai lạt khác sẽ được sử dụng Node.js như một máy chủ (http://nodejs.org/) và gọi R từ bên trong như một quá trình trẻ em, tìm kiếm các tài liệu Node.js API cho chi tiết cụ thể.

Cũng xem xét điều này xác nhận: Is it possible to execute an external program from within node.js?

Lưu ý: nút thể chạy bất kỳ kịch bản JS (s), bạn có thể có, họ không nhất thiết cần phải có nút cụ thể.

+0

Bạn có thể thêm giải thích về R-nút không? –

+1

Chắc chắn, tôi đã không đích thân thử nó, nhưng điều này được trích dẫn trực tiếp từ gitourious, bạn chỉ cần bấm vào đó nhỏ hơn ... link :) //// R-Node là một trang web front-end gói phân tích thống kê R. Sử dụng giao diện người dùng này, bạn có thể từ bất kỳ trình duyệt web nào kết nối với một cá thể R chạy trên máy chủ từ xa (hoặc cục bộ) và tương tác với nó, gửi lệnh và nhận phản hồi. Cụ thể, các lệnh vẽ đồ thị như lô() và hist() sẽ> thực thi trong trình duyệt, vẽ biểu đồ dưới dạng hình ảnh SVG. –

+2

Luôn luôn tốt hơn để có thông tin ở đây trên SO, và thậm chí tốt hơn trong câu trả lời chính nó. Các trang web có thói quen khó chịu khi di chuyển hoặc chỉnh sửa. Trông giống như một gói hữu ích mặc dù hy vọng nó sẽ dính xung quanh. –

0

Đây không phải là cách tốt nhất, nhưng tôi có thể thực hiện các bước sau cho dự án Javascript + R của riêng mình (silly.r là một tập lệnh R sống trong thư mục "r"). Tôi về cơ bản chạy mã R như một lệnh terminal từ Server Express của tôi:

app.get('/sfunction', function (req, res) { 
 
    exec('Rscript r/silly.r this is a test', function(error, stdout, stderr) { 
 
     if (error) { 
 
      console.log(error); 
 
      res.send(error); 
 
     } 
 
     else if (stderr) { 
 
      console.log(stderr); 
 
      res.send(stderr); 
 
     } 
 
     else if (stdout) { 
 
      console.log("RAN SUCCESSFULLY"); 
 
      res.sendfile("savedoutput/test.json"); 
 
     } 
 
    }); 
 
});

Mã này là từ dòng 167-182 từ đây: https://github.com/ngopal/VisualEncodingEngine/blob/master/jsserver/app.js

Các vấn đề liên quan