programing

C - R 프로그래머의 경우 - 기본을 초과한 경우 권장 리소스/접근 방법

css3 2023. 10. 22. 20:20

C - R 프로그래머의 경우 - 기본을 초과한 경우 권장 리소스/접근 방법

이것이 유용할 수 있는 R 코드를 C로 변환하는 능력을 갖추기 위해 C 스킬을 향상시키고 싶습니다.가는 길에 도움이 되는 힌트는 무엇입니까?

배경:저는 몇 년 전에 온라인 C 입문 과정을 따라 다녔는데, 여기에 R 확장 기능과 S 프로그래밍(베너블 & 리플리)을 추가하여 병목 작업을 C로 전환할 수 있었습니다. 예를 들어 서브매트릭스의 곱을 계산하는 것이 가능했습니다(제가 거기서 바퀴를 다시 발명했습니까?).그러나 나는 이것을 조금 뛰어넘고 싶습니다. 예를 들어 더 큰 코드 덩어리 변환, 선형 대수 루틴 등을 사용합니다.

분명 예전에 사용했던 자료들을 통해 배울 점이 더 많지만, 다른 사람들이 추천하는 자료들이 있는지 궁금했습니다.예제를 통해 작업하는 것은 분명히 더 많은 것을 배울 수 있는 한 가지 방법입니다. Brian Ripley는 S의 Efficient Programming에 대한 이 워크숍에서 S 프로토타입에서 S+C로 이동한 몇 가지 예를 제시했으며, 최근에는 생체정보학을 위한 Advanced R(미안하지만 하이퍼링크를 게시할 수 없음)에 R+C 알고리즘 작성에 대한 연구가 포함되어 있습니다.이와 같은 방법이나 다른 제안을 주시면 감사하겠습니다.

그것은 매우 흥미로운 질문입니다.마침, 저는 R로 옮기기 전에 C와 C++를 배웠기 때문에 R에 C/C++를 더 쉽게 추가할 수 있었을 것입니다.

그러나 그것에도 불구하고, 저는 당신이 배워야 하는 C 레벨의 매크로와 R-내부가 다르기 때문에 R에 순수한 C를 추가하는 것은 엄청나게 복잡하다고 가장 먼저 말할 것입니다.

그래서 제가 가장 좋아하는 주장을 하게 되었습니다.Rcpp 패키지와 같은 추가 추상화 계층을 사용합니다.그것은 고약한 세부사항들을 많이 숨깁니다.그리고 C++를 많이 알지 않아도 활용할 수 있기를 바랍니다.R-Forge의 작은 earthmovdist 패키지는 Rcpp 래퍼 클래스를 사용하여 하나의 특정 메트릭을 인터페이스하는 패키지입니다.

편집 1: 예를 들어, 여기서 earthmovdist의 주요 기능을 참조하십시오. earthmovdist는 충분히 읽기 쉬워야 합니다. 아마도 한쪽에 (짧은) Rcpp 래퍼 클래스 패키지 설명서가 있을 것입니다.

편집 2: C++가 더 적절하고 R-유사하다고 생각하는 세 가지 빠른 이유:

  • Rcpp prapper classs를 사용하는 것은 PROTECT와 UNPROTECT를 사용할 필요가 없다는 것을 의미합니다. 이는 매핑되지 않은 경우 오류 및 힙 손상의 빈번한 원인입니다.

  • Rcpp를 사용하고 STL 컨테이너 클래스를 사용합니다.vector등은 당신이 명시적으로 전화할 필요가 없다는 것을 의미합니다.malloc()/free()아니면new/delete이를 통해 또 다른 빈번한 오류 원인을 제거할 수 있습니다.

  • Rcpp로 모든 것을 포장할 수 있습니다.try/catch을(를) C++ 수준으로 차단하고 예외를 R로 다시 보고합니다. 따라서 갑자기 seg.fault 및 프로그램이 중단되지 않습니다.

그렇기는 하지만, 언어 선택은 매우 개인적인 결정이며, 많은 사용자들은 물론 C와 R 사이의 낮은 수준의 인터페이스에 완벽하게 만족합니다.

저도 이 문제와 씨름해 왔습니다.

C의 지휘 능력을 향상시키는 것이 문제라면, 그 주제에 대한 책 목록이 많습니다.그들은 모두 K&R로 시작합니다.저는 P. van der Linden의 "Expert C Programming"과 S. Prata의 "C primer"를 즐겼습니다.C 표준 라이브러리에 대한 모든 참조는 작동합니다.

C와 R의 인터페이스 문제라면 앞서 언급한 공식 R 문서 이외에 이 하버드 과정빠른 시작 가이드를 확인할 수 있습니다.저는 스칼라와 배열을 C에게 전달했을 뿐이며, 복잡한 데이터 구조를 인터페이스하는 방법을 솔직히 알지 못합니다.

C++를 R에 인터페이스하거나 C++ 스킬을 쌓는 것이 문제라면 C++를 많이 사용하지 않기 때문에 대답할 수 없습니다.저에게 좋은 출발점은 "C++ the Core Language"(오 레일리)였습니다.아주 단순하고 원시적이지만 C에서 오는 사람들에게 유용합니다.

저의 주된 추천 사항은 다른 패키지들을 살펴보는 것입니다.말할 것도 없이, 모든 패키지는 C 코드를 사용하지 않기 때문에, 당신은 C 코드를 사용하는 예를 찾을 필요가 있을 것입니다.모든 패키지의 소스 코드를 CLAN에서 다운로드할 수 있으며, 경우에 따라서는 R-Forge에서 검색할 수도 있습니다.일부 R 프로젝트는 구글 코드나 깃허브 같은 사이트(예: ggplot2)에서도 유지 관리됩니다.C 코드는 "src" 디렉토리에서 찾을 수 있습니다.

일반적으로 달성하려는 작업을 생각한 다음 비슷한 작업을 수행하는 패키지를 살펴봅니다.

"C 프로그래밍 언어" 책은 아마도 여전히 가장 널리 사용되고 있기 때문에, 여러분은 책꽂이에 그것을 가지고 싶어할지도 모릅니다.다음 무료 책도 유용한 자료입니다: http://publications.gbdirect.co.uk/c_book/

"C를 배우기에 가장 좋은 책은 무엇입니까?"는 평생 SO 질문입니다. (중간 링크가 가장 좋습니다.)

R에 특화된 C 학습 방법에 대해서는 R 소스 코드를 다운로드하여 몇 가지를 살펴보는 것이 유익하다고 생각했습니다.내부코드.

편집: 다른 사람이 방금 "K&R 후에 무엇을 읽을 것인가?"라고 물었습니다.

C를 사용하여 병목 현상을 제거하는 것이 목표라면 C의 좋은 수치 라이브러리가 필요할 것입니다.여러 가지가 있지만 gsl(GNU Scientific Library)이 꽤 유용하다는 것을 알았습니다.

http://www.gnu.org/software/gsl/

또한 중요한 수치 기법에 대한 개요를 제공하는 고전적인 책인 "C의 수치 레시피"도 있습니다(코드 버바텀을 사용하는 것을 추천하지는 않습니다).

언급URL : https://stackoverflow.com/questions/1427771/c-for-r-programmers-recommended-resources-approaches-once-past-the-basics