gpt4 book ai didi

c++ - 使用 #include 无法检查 R 包

转载 作者:行者123 更新时间:2023-12-03 06:56:02 24 4
gpt4 key购买 nike

我正在用 C++ 为 R 构建一个包。如何在代码中包含库?例如,如果我使用 #include <vector> vector ,R 检查失败并出现错误

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

我试过使用 LinkingTo: vector在 DESCRIPTION 文件中,如另一个答案中所述,但它不起作用。

最佳答案

最近添加的标题为 Thirteen Simple Steps for Creating an R Package with an External Library 的小插图涵盖您要求的主题。

从广义上讲,可以有三种类型的带有外部库的包:

  • header-only,这很简单,因为您只需要处理 -I... 标志
  • 嵌入,这很容易,因为库可以包含在包中
  • 外部可能是最大的库,这是最难的变体

外部库是最难的,因为 R 的可移植性非常强,这让您担心如何在 Windows、macOS 和不同的 Linux 风格上使用该库进行构建。

综上所述,这里您的问题一定更根本。我们不能说太多,因为您没有提供 MCVE但是很容易证明 Rcpp 当然知道 STL vector 类在哪里(初始代码只有一行,这里打断只是为了说明)

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。请看A Brief Introduction to 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 中描述了如何操作。手动的。在我的 talks page我有十多年前的几个(较旧的)教程的链接,这些教程显示了示例。因为这实际上很麻烦我会推荐 Rcpp。

关于c++ - 使用 #include <vector> 无法检查 R 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64171536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com