R과 Julia를 연결?


135

Julia는 빠르고 구문 이 좋지 않은 계산 (예 : here )에 대해 매우 유망 해 보이지만 아직 전체 통계 워크 플로 측면에서 R 근처에 있지는 않을 것으로 보입니다 . 그래서 C 프로그램이 주로 R 프로그램에서 사용되는 곳에서 사용하고 싶습니다 : 느린 코드 부분을 최적화합니다. 그러나 Julia를 배우는 데 시간을 투자하기 전에 Julia 코드를 R 코드에 포함시키는 데 어떤 기능이 있는지 궁금합니다.

그래서:

  • R과 Julia를 연결하기 위해 어떤 시설이 있습니까?
  • Rcpp에서 0까지의 규모로 얼마나 강력하고 신중하게 생각하십니까?

Rcpp가 R 내에서 C ++ 호출을 허용하는 것처럼 R에서 Julia를 호출하고 싶습니다. Julia의 R에게 전화를 걸고 싶지 않습니다. (따라서 RCall.jl이 작동하지 않습니다)


7
생각 엔 당신은 아주 빨리 얼리 어답터가 될 것이며 그러한 처벌을 받게 될 것입니다. 나는 틀렸다는 것이 기쁘다 – 나는 또한 당신이 일을하고 우리에게 중간-어댑터를위한 길을 개척하게되어
기쁘다

15
성능 벤치 마크에서 사용하는 기능은 R : github.com/JuliaLang/julia/blob/master/test/perf/perf.R 을 사용하는 매우 특이한 방법처럼 보입니다 . 그것은 페라리에 디젤을 넣는 것과 거의 비슷합니다.
James

2
문제는 관련이 있습니다. Julia의 AC ABI가 등장하는 것 같습니다. Julia-to-R 인터페이스를 곧 만들게 될 가능성이 있습니다.
lgautier

4
Julia-to-R 브리지가 대략 작동합니다 ( github.com/lgautier/Rif.jl ). 다른 길을가는 것은 Julia 쪽의 진행중인 작업에 달려 있습니다.
lgautier

3
@lgautier 나는 진심으로 작업을 다시 시작할 수 있기를 바랍니다. 지옥, 이것을 지원하는 킥 스타터 페이지가 있다면, 나는 거기에있을 것입니다.
Maxim.K

답변:


42

RJulia R 패키지는 꽤 좋은 지금 R.부터 보이는 R CMD check(경우 경고 또는 오류없이 실행 julia제대로 설치).

내 견해에서 가장 큰 TODO는 Julia가 R에서 실제로 기본적으로 유연한 일반 데이터 구조를 구성하는 명명 된 목록을 반환하도록하는 것입니다.

Doug Bates 는 Julia에서 R로 (즉, R에서 Julia 로의 다른 방향으로) 양방향 인터페이스 RCall 에 대해 경고했습니다 . 또한 Doug 는 현재 안정적인 버전의 julia보다 julia 0.4.0 을 타겟팅하는 것이 좋습니다 .


57

나도 더그 베이츠가 나에게 월에 헤드 업을 보낸 이후로 줄리아에서 찾고있다 . 그러나 @ gsk3처럼 풍부한 R 객체를 Julia에게 전달하고 싶기 때문에 이것을 "Rcpp 스케일"로 측정합니다. 그리고 그것은 현재 전혀 지원되지 않는 것 같습니다.

Julia는 훌륭하고 간단한 C 인터페이스를 가지고 있습니다. 그래서 우리에게 같은 것을 얻습니다 .C(). 그러나 최근 r-devel에서 논의한 것처럼 .C(), 대부분의 경우 .Call()실제 R 객체를 나타내는 실제 SEXP 변수를 전달하기를 원하지 않습니다 . 그래서 지금은이 제한 때문에 R의 Julia에 대한 범위가 거의 없습니다.

Julia가 조금 성숙하기 전에 tcp / ip를 Rserve에 사용하는 간접 인터페이스가 처음 시작되어 적절한 C ++ 인터페이스를 얻을 수 있습니다. 또는 실제 R API는 C 계층 만 제공하는 것처럼 Rcpp 기반의 무언가를 사용하여 R에서 C ++로 가져 오기 전에 R에서 C ++로 가져옵니다. 던노

그리고 하루가 끝나면 약간의 인내심이 필요할 수 있습니다. 프리츠 레이 쉬 (Fritz Leisch)가 comp.os.linux.announce 뉴스 그룹에서 처음으로 발표했을 때 1996 년 또는 1997 년경 R을 살펴보기 시작했습니다. 그리고 R은 그 당시에는 시설이 다소 제한적이었습니다 (물론 S 언어에 대한 약속은 물론 우리가 승자가 있음을 알았습니다). 그리고 몇 년 후 나는 그것을 기본 모델링 언어로 만들 준비가되었습니다. 그 당시 CRAN은 여전히 ​​100 패키지 미만이었습니다 ...

줄리아가 잘 갈 수 있습니다. 하지만 지금은 우리 중 많은 사람들이 R에서 일을하게 될 것이라고 생각하고 Julia에게 약간의 호기심이 생겼습니다.


1
내 지식 줄리아는 C에 내장 할 수있는 정적 컴파일러를 할 계획이 없기 때문에 ++ 우리는 몇 시간을 기다려야 할 수도 있습니다
pyCthon

48

이 답변 에서 설명한대로 Julia 개발 계획 은 C ABI를 사용하여 호출 할 수있는 Julia 라이브러리를 공유 라이브러리로 컴파일하는 것입니다. 이런 일이 발생하면 C / C ++ 코드를 호출하는 것처럼 R에서 Julia 코드를 호출하는 것이 쉬울 것입니다. 그러나 이것이 가능해지기 위해서는 상당한 양의 작업이 필요합니다.


4
이것은 매우 유망한 소리입니다. 나는 (그리고 다른 사람들은) Julia가 Matlab이 현재 어떻게 사용되는지에 대한 훌륭한 대체물이라고 생각합니다. 이를 위해 R과 Julia는 놀라운 보완책이 될 수 있습니다. Julia가 R을 대체한다고해도 (정직하게도 괜찮습니다) Julia의 통계 라이브러리가 풍부한 곳이되기까지는 적어도 10 년이 걸릴 것입니다. -통계 컴퓨팅 번창.
Ari B. Friedman

8
이 글을 쓴 후이 상황이 바뀌 었습니까? (ps 나는 줄리아를 사랑한다 , 그것에 대한 당신의 작업에 감사드립니다!)
Andy Hayden

23

빠른 업데이트. 이 질문이 제기 된 이후 Julia 패키지는 Julia 내에서 R 프로그램을 호출 할 수있는 시작 부분이있었습니다.

더 여기 : https://github.com/lgautier/Rif.jl


1
고맙지 만 위의 lgautier 자신의 의견을 참조하십시오. 이것은 반대 방향입니다. 나는 R. 내에서 줄리아를 호출 할
아리 B. 프리드먼에게

5
+1 Julia와 같은 좁은 주제에서 모든 정보가 매우 유익하기 때문에
Qbik

@ AriB.Friedman이 말했듯이, 이것은 새로운 정보가 아니며 우리 모두 R의 Julia에게 전화를하고 싶습니다.
Martin Mächler

13

이 프로젝트를 본 사람이 있습니까?

https://github.com/armgong/RJulia

상당히 새롭지 만 요청 된 것을 정확하게 수행하는 것 같습니다!


4
힌트 주셔서 감사합니다. 실제로 이것이 효과가 있다면 해결책이 될 것입니다. (최신 R 3.1.2 패치 사용) 및 julia (0.4.0-dev .. 2014 년 12 월 30 일 우분투 패키지로 업데이트)를 설치하려고했습니다. 그런 다음 컴파일에 실패하고 난 github에 문제 열어 github.com/armgong/RJulia/issues/10 우리가 곧 ... 더하자의 희망
마틴 Mächler

1
진전이 있습니까? 나는 그들의 github 저장소에서 꽤 활발한 개발 알림을 받았기 때문에 문제가 해결되고 있다고 상상할 것입니다.
Adam

2
과연! 여기에 후속 조치를 취하지 않았지만 위의 문제 페이지에서 주요 문제가 모두 제거되었습니다. 저는 유용한 도움말 페이지를 추가하여 패키지를 CRAN에 배포 할 수 있도록 가까이하기로했습니다. 그러나 불행히도 나는 다른 바쁜 일에 너무 깊이 빠져 있기 때문에 지금 당장 기다려야합니다.
Martin Mächler

11

JuliaCall최근에 R로 Julia를 포함 시키는 R 패키지를 작성합니다 . 패키지는 CRAN에 있습니다.

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

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

패키지 사용법은 다음과 같습니다.

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)

보시다시피, 명령 문자열을 보내고 Julia 함수를 정말 쉽게 호출 할 수 있습니다.

JuliaCall예를 들어 Julia 패키지를 사용하여 Julia 패키지를 래핑하는 R 패키지도 있습니다 .

  • convexjlr CRAN에있는 Convex.jl을 사용하여 R에서 훈련 된 볼록 프로그래밍
  • ipoptjlr줄리아 패키지를 사용하여 실내 포인트 최적화를위한 R 인터페이스 (IPOPT) Ipopt.jl.

에 대한 의견을 환영합니다 JuliaCall!


7

도있다 XRJulia 패키지 에서 XR의 전자에 목표 패키지의 가족 X는 경향이 R 존 챔버스 (John Chambers) (R의 제작자 중 하나)으로는. Julia와 R간에 rJulia 및 유사한 패키지간에 데이터를 전송하기 위해 약간 다른 접근 (JSON)을 사용합니다.


5

내 시도를 확인하고 싶을 수도 있습니다 : JuliaConnectoRR- 패키지. 패키지는 GitHubCRAN 에서 사용 가능 합니다.

목표는 R에서 Julia 함수를 R 코드에서 R 함수처럼 사용할 수 있도록 R에서 직접 가져 오는 것입니다. Julia 함수의 반환 값은 R 데이터 구조로 변환되며 R 데이터 구조는 R에서 사용할 수 있으며 Julia로 다시 전달됩니다. Julia와 R의 추가 통합을 위해 R 함수를 콜백 함수로 전달하여 Julia에서 R로 다시 호출 할 수도 있습니다.

XRJulia와 마찬가지로 JuliaConnectoR은 TCP를 사용하지만 기능 지향적이며 XRJulia와 마찬가지로 텍스트 기반 JSON 메시지 대신 최적화 된 사용자 지정 스트리밍 형식을 사용합니다. TCP를 통한 통신의 한 가지 장점은 다른 버전의 Julia 및 R에 대한 안정성입니다. 이는 RCall 및 JuliaCall과 같은 C 인터페이스 수준에서 통합으로 유지하기가 훨씬 어렵습니다.

이 패키지는 Julia ≥ 1.0 및 광범위한 R 버전에서 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.