2012-04-16 1 views
0

Как выполнить команду R в C, без использования расширений R, что-то вроде:как запустить участок R в C/C++?

int main() { 

    system("R g<- graph(c(0,1,0,4,0,9,1,7,1,9,2,9,2,3,2,5,3,6,3,9,4,5,4,8,5,8,6,7,6,8,7,8),n=10,dir=FALSE) 
    plot(g)") 

    return(0) 
} 
+5

Вы пробовали это? Не получилось? Вы описали неудачу с нами? – abelenky

+0

, конечно, это не удается, это просто пример, который я хочу выполнить из C – user1310873

+0

Я просто хочу построить график таким же образом в R, но в C/C++ – user1310873

ответ

4

Вы можете запустить R с помощью системы() вызов, как у вас есть, но вы не можете придерживаться функции R на командной строки.

Что вы можете сделать, это написать код R в файл и вызвать его с system("R CMD BATCH foo.R") - минимально:

main(){system("R CMD BATCH test.R");} 

Теперь, по умолчанию выход графики из R CMD BATCH идти в файл PDF, так вам нужно открыть графическое окно и сделать паузу в сценарии, если вы хотите его увидеть.

Конечно, ваш файл test.R может быть написан вашим кодом C до его запуска, и вы можете сохранить его во временном каталоге или что-то в этом роде.

+0

ОК, он работает. Благодаря! – user1310873

+0

Я не знаю, что произошло, я сделал это, и он продолжался 0%. – user1310873

2

Альтернатива для R CMD BATCH: Rscript. Я думаю, что для проблем, где C++ и R не тесно интегрированы, то есть существуют разные фазы, где используются R и C++, а также большие объемы или частота обмена данными, использование системных вызовов может быть очень простым и надежным.

Альтернативой является использование R и C++ рядом друг с другом и обмен информацией между ними. Это можно сделать, используя RInside pacakge, который составляет available on CRAN.

+0

Rscript: Простой, да. Надежный нет. Вот почему мы написали RInside :) –

+0

Что конкретно не связано с Rscript? –

+0

Обмен файлами на основе результатов является подверженным ошибкам. –

Смежные вопросы