使用#include <vector>无法检查R包

如何解决使用#include <vector>无法检查R包

我正在用C ++构建R的软件包。如何在代码中包含库?例如,如果我使用#include <vector>向量,则R检查失败并显示错误

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

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

解决方法

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

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

  • 仅标头,这很容易,因为您只需要注意-I...标志
  • 嵌入式,这很容易,因为软件包中可以包含 small
  • 可能是最大库的外部库,这是最难的变体

外部库最难,因为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的更多详细信息,请参见A Brief Introduction to Rcpp

使用Rcpp类型的PS只是

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。

,

我想您正在使用Rcpp软件包。看看Rcpp vignette可能是个好主意。官方Writing R Extensions手册在这里也很有用。这些包含您需要的很多信息。

如果您只需要专门使用vector,或者只想包含任何非标准库,就会有所不同。

如果只需要使用向量,则可以在LinkingTo: Rcpp文件中包含DESCRIPTION,并在完成添加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::NumericVector名称空间提供的Rcpp

如果您需要其他库(例如,提升图书馆。有多种方法可以将其保存/存档,但也有很多信息,还有一些具有实用答案的问题,例如How to build a R package which use Rcpp with external c++ libraries?

您还可以查看使用Rcpp和其他c ++库(例如boost)的其他R包。 DescTools是一个很好的例子(Git DescTools)。

我建议您尝试按照Rcpp插图中的指南正确设置Rcpp,如果仍然无法通过Rcpp进行安装,请在此处提供更详细的信息,包括您要尝试添加的库以及失败的地方。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-