2012-04-01 14 views
108

Julia trông rất hứa hẹn cho tính toán nhanh và cú pháp-cú pháp (ví dụ: here), nhưng tôi nghi ngờ nó sẽ không ở bất kỳ đâu gần R về quy trình thống kê tổng thể trong một thời gian nào đó. Vì vậy, tôi muốn sử dụng nó trong đó C++ chủ yếu được sử dụng trong các chương trình R: để tối ưu hóa các phần chậm của mã. Trước khi tôi đầu tư thời gian vào việc học Julia, mặc dù, tôi tò mò muốn biết những cơ sở nào để nhúng đoạn trích Julia vào mã R.Liên kết R và Julia?

Vì vậy:

  • cơ sở vật chất gì được ra khỏi đó để liên kết R và Julia?
  • Chúng mạnh mẽ và được nghĩ ra như thế nào, trên thang điểm từ 0 đến Rcpp?

Tôi muốn gọi Julia từ R, giống như Rcpp cho phép gọi C++ từ trong R ngay bây giờ. Tôi không muốn gọi R từ Julia. (Vì vậy, RCall.jl sẽ không hoạt động)

+6

* Đoán * của tôi là bạn sẽ là người nhận nuôi sớm và chịu các hình phạt đó. Tôi rất vui khi được sai - Tôi cũng rất vui khi được bạn làm công việc và mở đường cho chúng tôi chấp nhận trung bình ... –

+2

Tại sao không chỉ sử dụng NumPy? – Marcin

+14

Các chức năng mà chúng sử dụng trong các tiêu chuẩn hiệu suất có vẻ như một cách khá khác thường khi sử dụng R: https://github.com/JuliaLang/julia/blob/master/test/perf/perf.R. Nó gần giống như đưa diesel vào một Ferarri ... – James

Trả lời

25

[https://github.com/armgong/RJulia] Gói R có vẻ khá tốt ngay bây giờ từ R. R CMD check chạy mà không có cảnh báo hoặc lỗi (nếu julia được cài đặt đúng cách).

lớn nhất TODO trong quan điểm của tôi là để có được Julia trở lại danh sách tên mà tạo thành cấu trúc dữ liệu chung linh hoạt thực sự cơ bản trong R.

Lưu ý rằng Doug Bates cảnh báo tôi về RCall [https://github.com/JuliaStats/RCall.jl] một giao diện hai chiều từ Julia đến R (tức là, hướng khác với R đến Julia). Ngoài ra, Doug đề xuất nhắm mục tiêu julia 0.4.0 thay vì phiên bản ổn định hiện tại của julia.

50

Tôi cũng vậy have been looking at Julia ever since Doug Bates sent me a heads-up in January. Nhưng giống như @ gsk3, tôi đo lường điều này trên "quy mô Rcpp" khi tôi muốn truyền các đối tượng R phong phú cho Julia. Và điều đó dường như không được hỗ trợ gì cả.

Julia có giao diện C đẹp và đơn giản. Vì vậy, chúng tôi nhận được một cái gì đó như .C(). Nhưng như đã thảo luận gần đây về r-devel, bạn thực sự không muốn .C(), trong hầu hết các trường hợp, bạn muốn sử dụng .Call() để chuyển các biến SEXP thực tế đại diện cho các đối tượng R thực. Vì vậy, ngay bây giờ tôi thấy phạm vi nhỏ cho Julia từ R vì giới hạn này.

Có thể một giao diện gián tiếp sử dụng tcp/ip to Rserve có thể là một khởi đầu đầu tiên trước khi Julia trưởng thành một chút và chúng tôi có giao diện C++ phù hợp. Hoặc chúng tôi sử dụng thứ gì đó dựa trên Rcpp để lấy từ R đến C++ trước khi chúng ta nhập một lớp trung gian [mà ai đó phải viết] mà từ đó chúng tôi cung cấp dữ liệu cho Julia, giống như R API thực tế chỉ cung cấp lớp C. Dunno.

Và cuối ngày, có thể cần một số kiên nhẫn. Tôi bắt đầu nhìn vào R khoảng năm 1996 hoặc 1997 khi Fritz Leisch thực hiện những thông báo đầu tiên trên nhóm tin tức comp.os.linux.announce. Và R có cơ sở khá hạn chế sau đó (nhưng lời hứa đầy đủ của ngôn ngữ S, tất nhiên, si chúng tôi biết chúng tôi đã có một người chiến thắng). Và một vài năm sau, tôi đã sẵn sàng làm cho nó trở thành ngôn ngữ lập trình chính của tôi. Vào thời điểm đó, CRAN vẫn còn dưới 100 gói ...

Julia cũng có thể đến đó. Nhưng bây giờ tôi nghi ngờ nhiều người trong chúng ta sẽ hoàn thành công việc trong R, và chỉ có một vài cái nhìn thoáng qua tò mò ở Julia.

+1

do kiến ​​thức của tôi không có kế hoạch cho julia để có một trình biên dịch tĩnh cho phép nhúng trong C++, chúng ta có thể phải chờ một thời gian – pyCthon

41

Kế hoạch phát triển Julia, như tôi đã mô tả trong this answer là cho phép biên dịch mã Julia vào thư viện được chia sẻ, có thể gọi bằng cách sử dụng C ABI. Một khi điều này xảy ra, nó sẽ dễ dàng gọi mã Julia từ R vì nó là để gọi mã C/C++. Tuy nhiên, có một lượng công việc cần thiết trước khi điều này trở thành có thể.

+3

Điều này nghe có vẻ rất hứa hẹn. Tôi (và tôi nghĩ rằng những người khác) thấy Julia là một sự thay thế tuyệt vời cho cách Matlab hiện đang được sử dụng - cho kết quả tính toán nặng mà vẫn đòi hỏi trực giác toán học nhiều hơn C và ilk của nó cung cấp. Vì điều đó, R và Julia có thể là một bổ sung tuyệt vời. Ngay cả khi Julia thay thế R (và tôi sẽ tốt với điều đó, thẳng thắn), ít nhất là một thập niên trước khi thư viện thống kê ở Julia ở bất cứ nơi nào gần như giàu có, vì vậy trong khi đó, khả năng giao tiếp giữa R và Julia có thể giúp mở -tính toán thống kê nguồn phát triển mạnh. –

+6

Tình huống này có thay đổi kể từ khi bạn viết bài này không? (p.s. Tôi * yêu * Julia, cảm ơn vì công việc của bạn trên đó!) –

19

Cập nhật nhanh. Kể từ khi câu hỏi này được hỏi, đã có sự khởi đầu của một gói Julia cho phép người ta gọi các chương trình R từ bên trong Julia.

Thêm tại đây: https://github.com/lgautier/Rif.jl

+1

Cảm ơn, nhưng hãy xem nhận xét từ chính lgautier ở trên. Đây là hướng ngược lại. Tôi muốn gọi Julia từ bên trong R. –

+4

+1 vì trong chủ đề hẹp như Julia mọi thông tin là khá thông tin – Qbik

+0

Như @ AriB.Friedman nói, điều này không có thông tin mới - và tất cả chúng ta đều muốn gọi Julia từ R, không phải là cách khác xung quanh. –

10

Có ai nhìn thấy dự án này không?

https://github.com/armgong/RJulia

Khá mới nhưng dường như đang thực hiện chính xác những gì được yêu cầu!

+4

Cảm ơn gợi ý. Thật vậy đây sẽ là giải pháp nếu nó hoạt động. Tôi đã thử cài đặt (sử dụng bản vá R 3.1.2 rất hiện tại) và julia (0.4.0-dev .. được cập nhật vào ngày 30 tháng 12 năm 2014 dưới dạng gói ubuntu). Sau đó biên dịch thất bại và tôi đã mở vấn đề github https://github.com/armgong/RJulia/issues/10 Hãy hy vọng chúng tôi sẽ tiếp tục ... sớm –

+1

Bất kỳ tiến trình nào? Tôi nhận được thông báo phát triển khá tích cực từ repo github của họ vì vậy tôi muốn tưởng tượng các vấn đề đang được ironed ra ... – Adam

+2

Thật vậy! Không theo dõi ở đây - nhưng trên trang sự cố ở trên: Các vấn đề chính đã bị xóa. Tôi đã tình nguyện để có được gói gần hơn để được releasable (để CRAN), cụ thể là bằng cách thêm các trang trợ giúp hữu ích. Nhưng thật không may, tôi quá sâu trong những vấn đề bận rộn khác, vì vậy điều này phải chờ đợi (đối với tôi) cho bây giờ. –

4

Ngoài ra còn có gia đình XRJulia package từ XR các gói nhằm e X có xu hướng R bởi John Chambers (một trong những người sáng tạo của R). Nó sử dụng một cách tiếp cận khác nhau một chút (JSON) để chuyển dữ liệu giữa Julia và R sau đó rJulia và các gói tương tự.

4

Gần đây tôi tạo một gói R có tên là JuliaCall, đã nhúng Julia vào R. Gói này nằm trên CRAN.

https://cran.r-project.org/web/packages/JuliaCall/index.html

https://github.com/Non-Contradiction/JuliaCall

Việc sử dụng của gói là như thế này:

library(JuliaCall) 
julia <- julia_setup() 
julia_command("a = sqrt(2)"); julia_eval("a") 
julia_eval("sqrt(2)") 
julia_call("sqrt", 2) 
julia_eval("sqrt")(2) 

Như bạn thấy, bạn có thể gửi các chuỗi lệnh và gọi chức năng Julia thực sự dễ dàng.

Và cũng có một số gói R gói gói Julia sử dụng JuliaCall, ví dụ,

  • convexjlr cho Xử lý kỷ luật Lập trình lồi trong R sử dụng Convex.jl, cũng là trên cran.
  • ipoptjlr, Giao diện R cho bộ tối ưu hóa điểm nội bộ (IPOPT) sử dụng gói Julia Ipopt.jl.

Chào mừng bạn đến với bất kỳ phản hồi nào về JuliaCall !!