Liên kết R và Julia?


135

Julia có vẻ rất hứa hẹn cho tính toán nhanh và mạnh mẽ (ví dụ ở đây ), nhưng tôi nghi ngờ rằng nó sẽ không ở đâu gần R về mặt công việc thống kê tổng thể trong một thời gian. 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 mã chậm. Tuy nhiên, trước khi tôi đầu tư thời gian vào việc học Julia, tôi tò mò không biết những phương tiện nào có thể nhúng các đoạn mã Julia trong mã R.

Vì thế:

  • Những cơ sở nào hiện có để liên kết R và Julia?
  • Làm thế nào mạnh mẽ và chu đáo họ, 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ừ bên 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)


7
Tôi đoán là bạn sẽ là người chấp nhận rất sớm và phải chịu những hình phạt đó. Tôi rất vui vì đã sai - Tôi cũng rất vui khi có bạn làm việc và mở đường cho chúng tôi những người chấp nhận trung bình ...
Ben Bolker

15
Các chức năng họ sử dụng trong điểm chuẩn hiệu suất có vẻ như là một cách khá bất thường để sử dụng R: github.com/JuliaLang/julia/blob/master/test/perf/perf.R . Nó gần giống như đưa động cơ diesel vào Ferarri ...
James

2
Câu hỏi thích hợp. AC ABI cho Julia dường như đang nổi lên. Có khả năng tôi sẽ sớm có một cú đâm để tạo giao diện Julia-to-R.
lgautier

4
Tôi có một cây cầu Julia-to-R gần như hoạt động ( github.com/lgautier/Rif.jl ). Đi theo con đường khác phụ thuộc vào công việc vẫn đang tiến triển vào cuối Julia.
lgautier

3
@lgautier Tôi chân thành hy vọng bạn sẽ quản lý để tiếp tục công việc của bạn. Chết tiệt, nếu có một trang kickstarter để hỗ trợ điều này, tôi chắc chắn sẽ ở đó.
Maxim.K

Câu trả lời:


42

Hiện tại gói RJulia R trông khá tốt từ R. R CMD checkchạy mà không có cảnh báo hoặc lỗi (nếu juliađược cài đặt đúng cách).

TODO lớn nhất theo quan điểm của tôi là khiến Julia trả về các danh sách có tên 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 một giao diện hai chiều từ Julia đến R (nghĩa là hướng khác so với R đến Julia). Ngoài ra, Doug khuyến nghị nên nhắm mục tiêu julia 0.4.0 thay vì các phiên bản ổn định hiện tại của julia.


57

Tôi cũng đã nhìn vào Julia kể từ khi Doug Bates gửi cho tôi một cái đầu vào tháng Giêng . Nhưng giống như @ gsk3, tôi đo lường điều này theo "thang đo Rcpp" vì 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ợ ngay bây giờ.

Julia có giao diện C đẹp và đơn giản. Vì vậy, nó được chúng tôi một cái gì đó như .C(). Nhưng như đã thảo luận gần đây trên 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 muốn .Call()vượt qua 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ó lẽ một giao diện gián tiếp sử dụng tcp / ip cho Ruperve có thể là sự khởi đầu đầu tiên trước khi Julia trưởng thành một chút và chúng ta có được giao diện C ++ thích hợp. Hoặc chúng tôi sử dụng một cái gì đó dựa trên Rcpp để chuyển từ R sang C ++ trước khi chúng tôi nhập một lớp trung gian [mà ai đó sẽ phải viết] từ đó chúng tôi cung cấp dữ liệu cho Julia, giống như API R thực tế chỉ cung cấp một lớp C. Không biết.

Và cuối ngày, một số kiên nhẫn có thể cần thiết. Tôi bắt đầu xem xét R vào khoảng năm 1996 hoặc 1997 khi Fritz Leisch đưa ra những thông báo đầu tiên trên nhóm tin comp.os.linux.announce. Và R có cơ sở khá hạn chế sau đó (nhưng lời hứa đầy đủ về ngôn ngữ S, dĩ nhiên, chúng tôi biết mình đã có người chiến thắng). Và một vài năm sau tôi đã sẵn sàng biến nó thành ngôn ngữ mô hình chính của mình. Vào thời điểm đó, CRAN vẫn còn chưa đến 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 ở R, và chỉ có vài cái nhìn tò mò về Julia.


1
vì theo hiểu biết của tôi, không có kế hoạch nào cho julia có trình biên dịch tĩnh để cho phép nhúng vào C ++, chúng tôi có thể phải chờ một thời gian
pyCthon

48

Kế hoạch phát triển Julia, như tôi đã mô tả trong câu trả lời này là cho phép biên dịch mã Julia vào các thư viện dùng chung, có thể gọi được bằng C ABI. Một khi điều này xảy ra, sẽ dễ dàng gọi mã Julia từ R giống như 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ở nên khả thi.


4
Đ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) xem Julia như một sự thay thế tuyệt vời cho cách Matlab hiện đang được sử dụng - cho các kết quả nặng về tính toán 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ì thế, R và Julia có thể là một sự bổ sung tuyệt vời. Ngay cả khi Julia thay thế R (và tôi sẽ ổn với điều đó, thật lòng mà nói), sẽ mất ít nhất một thập kỷ trước khi thư viện thống kê ở Julia gần như giàu có, do đó, khả năng giao thoa giữa R và Julia có thể giúp mở ra nguồn máy tính thống kê phát triển mạnh.
Ari B. Friedman

8
Tình trạng này đã thay đổi kể từ khi bạn viết bài này? (ps Tôi yêu Julia, cảm ơn bạn đã làm việc đó!)
Andy Hayden

23

Một bản cập nhật nhanh chóng. Vì câu hỏi này đã được hỏi, đã có sự khởi đầu của gói Julia cho phép một người 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 xem ý kiến ​​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.
Ari B. Friedman

5
+1 vì trong chủ đề hẹp như Julia, mọi thông tin đều khá nhiều thông tin
Qbik

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

13

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

https://github.com/armgong/RJulia

Khá mới nhưng dường như đang làm chính xác những gì được yêu cầu!


4
Cảm ơn đã gợi ý. Quả thực đâ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 ubfox). Sau đó, quá trình biên dịch thất bại và tôi đã mở vấn đề github github.com/armgong/RJulia/issues/10 Hãy hy vọng chúng tôi sẽ sớm nhận được ... sớm hơn
Martin Mächler

1
Có tiến triển gì không? 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 tưởng tượng các vấn đề đang được giải quyết ...
Adam

2
Thật! Không theo dõi ở đây - nhưng trên trang vấn đề ở trên: Tất cả các vấn đề lớn đã được gỡ bỏ. Tôi đã tình nguyện để có được gói gần hơn để có thể tin cậy được (với 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 sắc trong các vấn đề bận rộn khác, vì vậy điều này phải chờ đợi (cho tôi) ngay bây giờ.
Martin Mächler

11

Tôi tạo một gói R được gọi JuliaCallgần đây, nó 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-Contradict/JuliaCall

Việc sử dụng gói 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 có thể thấy, bạn có thể gửi các chuỗi lệnh và gọi các hàm Julia thực sự dễ dàng.

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

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

Chào mừng cho bất kỳ thông tin phản hồi về JuliaCall!!


7

Ngoài ra còn có các gói XRJulia từ XR gia đình các gói nhằm e X có xu hướng R 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 (JSON) để chuyển dữ liệu giữa Julia và R rồi rJulia và các gói tương tự.


5

Bạn cũng có thể muốn kiểm tra nỗ lực của tôi: Gói JuliaConnectoRR. Gói có sẵn từ GitHubCRAN .

Mục tiêu của nó là nhập các hàm từ Julia trực tiếp trong R sao cho chúng có thể được sử dụng như các hàm R trong mã R. Các giá trị trả về của các hàm Julia được dịch sang cấu trúc dữ liệu R, có thể được sử dụng trong R và cũng được chuyển lại cho Julia. Để tích hợp thêm Julia và R, cũng có thể gọi lại từ Julia đến R bằng cách chuyển các hàm R thành các hàm gọi lại.

Tương tự như XRJulia, JuliaConnectoR dựa trên TCP, nhưng nó được định hướng theo chức năng và sử dụng định dạng phát trực tuyến tùy chỉnh được tối ưu hóa thay vì các thông báo JSON dựa trên văn bản như XRJulia. Một lợi thế của việc giao tiếp bằng TCP là sự ổn định đối với các phiên bản khác nhau của Julia và R. Điều này khó duy trì hơn nhiều với sự tích hợp ở cấp độ giao diện C như RCall và JuliaCall.

Gói này hoạt động với Julia 1.0 và một loạt các phiên bản R.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.