簡體   English   中英

使用#include<vector> 檢查 R 包失敗

[英]Using #include <vector> fails checking R package

我正在用 C++ 為 R 構建一個包。 如何在代碼中包含庫? 例如,如果我使用#include <vector>向量,則 R 檢查失敗並顯示錯誤

> fatal error: vector: No such file or directory
> E>  #include <vector>
> E>           ^~~~~~~~
> E> compilation terminated.

我曾嘗試在描述文件中使用LinkingTo: vector ,如另一個答案中所述,但它不起作用。

最近添加的標題為使用外部庫創建 R 包的十三個簡單步驟的小插圖涵蓋了您要求的主題。

非常廣泛地,可以有三種類型的帶有外部庫的包:

  • 僅標頭,這很容易,因為您只需要處理-I...標志
  • 嵌入,這很容易,因為包中可以包含小型
  • 外部用於大概更大的庫,這是最難的變體

外部庫是最難的,因為 R 非常便攜的特性讓你擔心如何在 Windows、macOS 和不同的 Linux 版本上使用該庫進行構建。

說了這么多,這里你的問題一定是更根本的。 我們不能說太多,因為你沒有提供的MCVE但它很容易證明它RCPP當然知道這里的STL向量類(初始密碼為一條線,這里被打破對博覽會唯一)

R> Rcpp::cppFunction("std::vector<int> doubleMe(std::vector<int> x) { \
      std::vector<int> y(x.size()); for (size_t i=0; i<x.size(); i++) \
           y[i] = x[i]+x[i]; return y; }")
R> doubleMe(1:3)
[1] 2 4 6
R> 

這清楚地表明 Rcpp 知道在哪里可以找到頭文件——所以要么你安裝了編譯器和庫,要么在你的計算機上以某種非常不尋常的方式安裝了 R,或者以錯誤的方式調用了 R。 有關Rcpp的更多詳細信息,請參閱Rcpp 簡介

PS 對於 Rcpp 類型,它只是

R> Rcpp::cppFunction("IntegerVector doubleMe(IntegerVector x) { return x+x; }")
R> doubleMe(2:4)
[1] 4 6 8
R> 

PPS 當然,您也可以在沒有 Rcpp的情況完成所有這些操作,(在這種情況下為必讀) Writing R Extensions手冊中描述了如何執行此操作。 在我的談話頁面上,我有幾個(較舊的)教程的鏈接,這些教程來自十多年前,其中顯示了示例。 由於這實際上很麻煩,我建議使用 Rcpp。

我猜你正在使用Rcpp包。 看一下Rcpp 小插圖可能是個好主意。 官方的編寫 R 擴展手冊在這里也很有用。 這些包含許多您需要的信息。

如果您只需要專門使用vector或者您只想包含任何非標准庫,則有所不同。

如果您只需要使用矢量,您可以在DESCRIPTION文件中使用LinkingTo: Rcpp ,並在完成添加 Rcpp 的所有其他必需步驟后,C++ 文件可能看起來像小插圖中的這個示例:

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
List rcpp_hello_world() {
  CharacterVector x = CharacterVector::create("foo", "bar");
  NumericVector y = NumericVector::create( 0.0, 1.0 ) ;
  List z = List::create( x, y ) ;

  return z ;
}

因此,您將使用例如由Rcpp命名空間提供的Rcpp::NumericVector

如果您需要不同的庫,例如 boost 庫,這當然行不通。 有不同的方法可以去/存檔這個,但是那里也有很多信息,還有一些有用的答案的問題,例如如何構建一個使用 Rcpp 和外部 C++ 庫的 R 包?

您還可以查看使用 Rcpp 和其他 C++ 庫(例如 boost)的其他 R 包。 DescTools是一個很好的例子( Git DescTools )。

我建議您嘗試按照 Rcpp 小插圖中的指南正確設置 Rcpp,如果仍然失敗,請在此處提供更詳細的信息,您要添加的庫以及失敗的位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM