8

我正在尝试将 C++/Rcpp 作为 R 的扩展来处理繁重的计算任务。最终,这些 C++ 库应该集成在一个包中,因此我正在寻找一种我需要轻松工作的工具/IDE 的设置/组合。我知道很大程度上取决于口味,但在选择之前了解我的选择仍然会很好。

所以:当您使用 C++ 库开发 R 包时,您使用的设置是什么?

  • 您是否对 R 和 C++ 使用相同的编辑器/IDE 以及哪个(或哪些)?
  • 是否有重要的额外工具(Rtools 除外)?
  • 总体设置中是否有重要的调整对于了解或显着加快该过程很重要?

对不起,如果这个问题以前被问过。我找到了所有 R 编辑器的列表,但没有专门针对开发包(包括 C++ 代码)的内容。非常感谢任何提示或提示。

编辑:平台是 Windows,但我可以毫无问题地迁移到 Linux(双启动,唯一让我无法使用 ubuntu 的是我的旧卡/旧屏幕组合缺少合适的驱动程序)

4

4 回答 4

6

Eclipse + statet如果你想加入我们的现代世界:)

于 2010-11-09T22:55:03.983 回答
3

我当然完全赞成更多的Rcpp工作:)

至于你的问题,按顺序:

  • 相同的编辑器(Emacs)在我使用的任何一个平台(主要是 Linux,偶尔是 Windows)上都具有很好的一致性;作为记录,我还表示支持qtcreatorIDE,它在 Linux 和 Windows 上非常好(但不支持 R)。
  • 不,在 Linux 上一切都是现成的(是的,在 Windows 上你确实需要 Rtools)......
  • 不是真的——你可能已经知道内联,它有利于测试 R/C++ 代码片段。

编辑:所以在某种程度上,这与普通的 R / C / C++ / Fortran 开发没有什么不同。在这种情况下,我通常会参考R FAQ 第 6 节,它完全致力于 R 和 Emacs :) 话虽如此,为 C++ 工作设置 Emacs 并不明显,这里有很多问题和帖子。我不使用任何特定的类浏览器,但有一些,以及自动完成类型等的方法。

于 2010-11-09T16:26:51.520 回答
2

您将需要一个可以处理多种语言、R、C+、可能是 Makefile 等的编辑器。既然您提到了 Rtools,听起来您就像在 Windows 上一样。我建议 Notepad++ 它可以处理 R、C++ 和许多其他语言。另外,您可以通过 NppExec 设置自定义命令以更轻松地构建包。我开发了一些使用 Notepad++ 大量使用 C/C++ 的包。

于 2010-11-09T16:48:45.017 回答
1

我刚刚编写了一个 cmake 脚本来生成用于开发 Rcpp 包的 Eclipse CDT 项目。

此外,cmake 可能能够生成 CodeBlocks 或 KDevelop3 项目,但我还没有检查这些功能。

环境

  • CMake >= 2.8.7
  • 日食> = 3.7
  • Eclipse CDT >= 1.4.2
  • R >= 2.15
  • Rcpp >= 0.10

配置

  • 从 Rstudio提供的github下载FindLibR.cmake

  • 生成Rcpp包,例如

    library(Rcpp)
    Rcpp.package.skeleton("RcppPackage")
    
  • 将名为CMakeLists.txt的以下脚本(或从gist下载)放在生成的文件夹中,例如上一个示例。RcppPackage

    cmake_minimum_required(VERSION 2.8)
    project(RcppPackage)
    find_package(LibR)
    if(${LIBR_FOUND})
    else()
        message(FATAL_ERROR "No R...")
    endif()
    message(STATUS ${CMAKE_SOURCE_DIR})
    execute_process(
        COMMAND ${LIBR_EXECUTABLE} "--slave" "-e" "stopifnot(require('Rcpp'));cat(Rcpp:::Rcpp.system.file('include'))"
        OUTPUT_VARIABLE LIBRCPP_INCLUDE_DIRS
    ) 
    include_directories(BEFORE ${LIBR_INCLUDE_DIRS})
    message(STATUS ${LIBR_INCLUDE_DIRS})
    include_directories(BEFORE ${LIBRCPP_INCLUDE_DIRS})
    message(STATUS ${LIBRCPP_INCLUDE_DIRS})
    add_custom_target(RcppPackage ALL
        COMMAND find ${CMAKE_SOURCE_DIR} -name "*.o" -exec rm "{}" "\;"
        COMMAND find ${CMAKE_SOURCE_DIR} -name "*.so" -exec rm "{}" "\;"
        COMMAND ${LIBR_EXECUTABLE} "--slave" "-e" "\"stopifnot(require(roxygen2));roxygenize('${CMAKE_SOURCE_DIR}',roclets=c('rd','collate','namespace'))\""
        COMMAND ${LIBR_EXECUTABLE} CMD INSTALL "${CMAKE_SOURCE_DIR}")
    
  • 自定义roxygenizeR CMD INSTALLCMakeLists.txt

  • 使用 cmake 生成项目

    mkdir build # don't create subdirectory of RcppPackage
    cd build
    cmake -G "Eclipse CDT4 - Unix Makefiles" <path to RcppPackage> -DCMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT=TRUE
    
  • 打开 eclipse 并从中导入项目build(例如,参见cmake-eclipse-cdt)。建立索引后,即可享受 Eclipse CDT 提供的几个便捷功能,例如跟踪和自动完成。

  • 您可以构建将转换为的项目R CMD INSTALLCMakeLists.txt中的任何内容。

于 2013-01-29T08:03:50.670 回答