2011-12-22 39 views
5

Tôi cần chạy các hàm thống kê từ R trong mã C++ của mình. Có cách nào để gọi chúng từ mã C++ của tôi không? Tôi đang sử dụng VS 2005, tôi có cần bao gồm bất kỳ tệp tiêu đề hoặc liên kết bất kỳ thư viện nào không? Tôi đã cài đặt R bằng trình cài đặt Windows chuẩn được cung cấp từ trang web của họ.Gọi hàm R từ VC++

Kính trọng,

+2

Tôi thấy điều này mà trông đầy hứa hẹn http://dirk.eddelbuettel.com/code/rcpp.html EDIT: Đây là gọi C++ từ R, bum: (EDIT: Chờ đã! Tôi đã tìm thấy một cái gì đó http://dirk.eddelbuettel.com/code/rinside.html :) :) –

+0

Cảm ơn Carl, tôi đã nhìn vào Rcpp và RInside, nhưng họ không cho đủ chi tiết để làm việc với VS. Tôi đã hy vọng có một ai đó ở đó đã sử dụng R với VS và có thể cho tôi biết phải làm gì. – Jawad

+0

Có thể điều này có thể làm sáng tỏ một số http://www.google.co.uk/url?sa=t&rct=j&q=r%20%2Bc%2B%2B&source=web&cd=9&ved=0CGAQtwIwCA&url=http%3A%2F%2Fwww .youtube.com% 2Fwatch% 3Fv% 3DUZkaZhsOfT4 & ei = 403zTtmxIabh4QTOr7mSCA & usg = AFQjCNGcDNvkB9SwhMsMRj20BvcTYsutCQ –

Trả lời

4

ngắn gọn:

  • Như đã nêu khá thường xuyên R tự nó không xây dựng dưới VS * làm cho liên kết mã C cứng nhưng-thể và C++ không thể (như thông tin tiêu đề chức năng không được chuẩn hóa).

  • Cả Rcpp và RInside hoạt động hoàn toàn tốt trên Windows, được cung cấp cho chuỗi công cụ Windows tiêu chuẩn . (RInside đã có một lỗi nhưng điều này bây giờ là cố định.)

    Các Rcpp FAQ có nhiều điều để nói về VS * (tức là bạn không thể mong đợi này để làm việc nếu R bản thân không thể làm việc với các trình biên dịch)

  • Nếu bạn phải sử dụng VS * thì đặt cược tốt nhất của bạn có thể là khớp nối lỏng lẻo qua mạng và sử dụng Rserve.

    Nếu bạn có thể chuyển đổi trình biên dịch thì Rcpp/RInside có thể được quan tâm; và phần còn lại của R API cũng theo ý của bạn.

  • Rcpp và cộng sự có tài liệu phong phú, bao gồm pdf giới thiệu Rcpp (là cũng là bài viết được đánh giá ngang hàng) và Rcpp-FAQ nói trên --- cũng như danh sách gửi thư chuyên dụng.

Và vui lòng không đăng chéo. Tôi cũng chỉ trả lời câu hỏi này on r-help.

+0

Cảm ơn Dirk, tôi vừa nhận được trả lời trên trợ giúp. Tôi đoán tôi sẽ phải sử dụng một cái gì đó khác hơn là R sau đó. – Jawad

+5

... hoặc một cái gì đó khác với Microsoft. –

-1

Phiên bản nhị phân của Rserve như được cung cấp trên https://rforge.net/Rserve/files/ không xây dựng trong Microsoft Visual C++. Trong tệp ReadMe.txt, tác giả chỉ ra rằng không có cấu hình cho Windows, nhưng có một Makefile.win đặc biệt. Chúng tôi đã không thành công để xây dựng nó, bằng cách sử dụng "make-makefile.win", vì không có tập tin config.h được cung cấp (chỉ config.h.in).

  1. Vì vậy, bình luận các dòng sau trong file header Rsrv.h:


    // # include "config .h"


Ở giai đoạn này , lỗi sau được tạo:


rsrv .h (384): lỗi nghiêm trọng C1189: # lỗi: "Không thể xác định độ tin cậy. Đảm bảo cấu hình .h được bao gồm hoặc _ _ {BIG | Little} _ENDIAN__ được định nghĩa."


  1. Giải quyết những vấn đề liên quan đến endian. Trong tập tin tiêu đề Rsvr.h, thay thế:

/* Windows is little-endian is most cases, anywhere else we're stuck*/ 
# error "Cannot determine endianness. Make sure config.h is included or __{BIG|LITTLE}_ENDIAN__ is defined ." 
# endif 

bởi:


/********* MODIFICATION *************/ 

/* # error "Cannot determine endianness. Make sure config.h is included or __{BIG|LITTLE}_ENDIAN__ is defined ." */ 
/************************************/ 
#define _BIG_ENDIAN (*(uint16_t *)?\xff? < 0x100) 

  1. Đảm bảo rằng các liên kết xây dựng môi trường để tệp Thư viện Winsock Ws2_32.lib. Để làm điều này, thêm các dòng code sau vào trước chức năng chính:

/* indicate to the linker that the Ws2_32.lib file is needed */ 
#pragma comment(lib, "Ws2_32.lib") 

ứng dụng sử dụng Winsock phải được liên kết với các tập tin thư viện Ws2_32.lib.

Để biết thêm chi tiết về R và Microsoft Visual C++ tích hợp qua Rserve, hãy truy cập https://www.researchgate.net/publication/305789407_Rserve_for_Windows_case_of_R_and_Microsoft_Visual_C_integration

+0

Chào mừng bạn đến với Stack Overflow! Trong khi điều này về mặt lý thuyết có thể trả lời câu hỏi, [nó sẽ là thích hợp hơn] (// meta.stackoverflow.com/q/8259) để bao gồm các phần thiết yếu của câu trả lời ở đây, và cung cấp liên kết để tham khảo. –