Я посмотрел высоко и низко для этого ответа, поэтому я прибегал к публикации здесь. Есть ли какое-либо ожидание какой-либо заметной задержки, если у меня есть программа на Linux C++, вызовите R-скрипт/функцию с чем-то вроде RCpp? Будет ли это ожидаться или даже разумным? Что делать, если я использую что-то вроде RCaller из Java JAR-файла? Считаете ли вы, что C++ по-прежнему быстрее, чем Java, если он вызывает тот же скрипт/функцию R? Любые ожидаемые различия? СпасибоБенчмаркинг RCPP или RCaller сценариев C++ или Java, вызывающих R?
ответ
Я думаю, вы хотите RInside, что делает его очень простым встраивание R в ваше приложение на C++. Он поставляется с многочисленными примерами в четырех каталогах, в том числе для использования с Qt, Wt (для webapps) и MPI.
В этом контексте вы запускаете R один раз при запуске, а затем имеете свой собственный экземпляр. Задержка в оба конца будет зависеть от того, сколько времени вам потребуется, чтобы отправить команду экземпляру R, плюс, однако, длительность R (которая вполне может доминировать) плюс возврат.
RInside использует Rcpp, поэтому вы получаете передачу всего объекта и все остальные тонкости. Взгляните на пример RInside и опубликуйте вопросы в списке rcpp-devel.
У меня нет специальных знаний о интерфейсе внешней функции R или RCpp, но они работали с несколькими другими. На ваши вопросы нельзя ответить с уверенностью. Есть только некоторые эмпирические правила. Работа FFI заключается в том, чтобы удовлетворять предположениям как вызывающей, так и вызываемой среды. Обычно это касается соответствия макетов данных обоих языков путем копирования из одного в другое. (Это то, о чем говорит RCpp.) Или вам может быть очень повезло и они совпадают. Если среда выполнения аналогична или данные перемещаются по границе между языками, это может быть очень эффективным: не намного дороже, чем вызов самообслуживания. По этой причине звонок из Фортрана очень часто происходит очень быстро. Если среда сильно отличается, необходимо скопировать большие структуры данных. Копии потребляют ресурсы: память и процессорные циклы. Сбор мусора - это ребенок-плакат для различий между средами: отдельные коллекционеры будут редко (читать никогда) сотрудничать. R и Java (оба сборщика мусора), вероятно, потребуют копирования по этой причине. Если вы пишете C++ специально для calL R, вы можете настроить свои данные в структурах RCpp, чтобы копии не нужны.
Я бы написал несколько небольших тестов, начиная с C++, которые имитируют объем данных, которые вы должны перемещать через интерфейс. Запустите и запустите их, чтобы получить накладные расходы. Из этого вы можете принимать реальные решения.
- 1. Rcpp или rdyncall
- 2. Бенчмаркинг страницы или ее контроллера
- 3. java.lang.NoClassDefFoundError: rcaller/RCaller в java-ee
- 4. Как java генерирует R boxplot через RCaller?
- 5. Реализация R в C++ Rcpp
- 6. RCaller & RQuantlib ошибка в Java
- 7. Эффективные перцептуально важные точки (PIPs). в R или Rcpp
- 8. получить символ от r до использования java rcaller
- 9. «Стандартный» R-бенчмаркинг?
- 10. Rcpp код врезается R
- 11. Building R пакет с C++ 11 и Rcpp на Windows,
- 12. R quantile using Rcpp
- 13. Rcpp/RcppArmadillo C++/R баланс для производительности
- 14. RCaller, обработка потоков и Java GUI
- 15. Как вызвать файл R Script из RCaller java?
- 16. RCaller: тот же код работает в rstudio не в rcaller
- 17. Rcaller, не отбрасывающий переменные
- 18. R в C++: Rcpp - комбинаторный пример
- 19. анаконда R - Rcpp ошибка
- 20. R Ошибка установки Rcpp в R 3.1.0
- 21. Вызов функции R из Rcpp
- 22. php - это язык сценариев или серверный язык?
- 23. Сделать функцию C++ (или переменный) доступна для R и функция Rcpp
- 24. Android: Java, C или C++?
- 25. Java и R bridge
- 26. DFS в Perl (или Java или C++ ...)
- 27. Sip для Java или C# или vb.net
- 28. Начало работы с RCaller 3.1
- 29. Rcpp: Возвращение массива C, как NumericMatrix к R
- 30. Загрузить данные с помощью RCaller
Хороший ответ Джин. Большое спасибо за накопление данных в C++ и использование R. Здесь моя проблема может быть с задержкой. С сборщиком мусора Java это также может представлять серьезную проблему, поскольку я никогда не занимался этим, поэтому, возможно, C++ - более разумный выбор. –