2014-11-27 4 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"];