2014-11-27 2 views
0

연산자 []를 사용하여 R.version.string의 값을 읽으려고합니다. 결과적으로 예외가 발생합니다. 대신, R.parseEval ("R.version.string")은 정상입니다. 아래는 문제를 보여주는 수정 된 rinside_sample0.cpp 예제입니다.RInside : R [ "R.version.string"]을 문자열로 읽을 수 없습니다.

#include <RInside.h>     // for the embedded R via RInside 

int main(int argc, char *argv[]) { 

    RInside R(argc, argv);    // create an embedded R instance 

    try { 
    std::string versionKO = R["R.version.string"]; 
    } catch(std::exception& ex) { 
    std::cerr << "Exception caught: " << ex.what() << std::endl; 
    } catch(...) { 
    std::cerr << "Unknown exception caught" << std::endl; 
    } 

    std::string versionOK = R.parseEval("R.version.string"); 
    std::cout << versionOK << std::endl; 

    R["txt"] = "Hello, world!\n"; // assign a char* (string) to 'txt' 

    R.parseEvalQ("cat(txt)");   // eval the init string, ignoring any returns 

    exit(0); 
} 

얻어진 출력은 다음

Exception caught: expecting a string 
R version 3.1.2 (2014-10-31) 
Hello, world! 
+1

** 중복하지 마십시오. ** **. 방금 GitHub 발급 티켓에 응답하고 폐쇄했습니다. 첫 번째 접근 방식이 제대로 작동해야한다고 잘못 생각한 것 외에는 문제는 없습니다. 그렇지 않을거야, 그게 벌레가 아니야 ... –

답변

0

https://github.com/eddelbuettel/rinside/issues/9이 문제에 해결되었다. 변수 R.version.string은 기본 환경에서 볼 수 있으며 다음과 같이 검색 할 수 있습니다.

Rcpp::Environment baseEnv("package:base"); 
std::string versionR = baseEnv["R.version.string"];