包中涉及std::transform的Rcpp代码的兼容性

2024-03-23

我正在完成我一直在做的一个包。所有检查看起来都很好,并且在我的计算机上编译没有问题。win-builder包裹也没有问题。作为进一步检查,我尝试在同事的计算机上从源代码安装,但失败了。问题来自于我从中获取的 Rcpp 函数Rcpp 中关于向量幂的 StackOverflow 线程 https://stackoverflow.com/questions/30106492/vectorized-exponent-for-pow-in-rcpp:

NumericVector vecpow(const NumericVector base, const NumericVector exp) {

  NumericVector out(base.size());

  std::transform(base.begin(), base.end(),
                 exp.begin(), out.begin(), ::pow);
  return out;
}

这对我来说编译和工作得很好,但在安装时给我的同事抛出一个错误,涉及

error: no matching function function for call to 'transform'

and

candidate function template not viable: requires 4 arguments, but 5 were provided.

我可以通过替换来重现该错误::pow在原始代码中pow。我使用的是 Windows 8.1,我的同事使用的是 Mac。该同事维护着自己的包,涉及大量Rcpp代码,通常编译没有问题。

我认为这可能是编译器问题。原始线程有一些涉及 C++11 的替代代码(线程已经有五年了),因此原则上,我可以使用替代方案替换有问题的代码。但是,由于我对此缺乏经验,因此这将是反复试验。我的问题是:出现此错误的原因是否简单?如何修改我的代码以确保该软件包可供大多数用户安装和使用?


该错误是由于编译器无法匹配引起的std::pow函数作为二进制运算(这可能是因为它至少有两个重载并且编译器无法猜测类型 float/double),从而产生以下注释:

注意:候选模板被忽略:无法推断模板参数“_BinaryOperation”

然后它又回到一元std::transform其中只有 4 个参数推动第二个音符:

注意:候选函数模板不可行:需要 4 个参数,但提供了 5 个参数

编译停止,因为它没有找到有效的std::transform应用于指定的参数。 切换自pow to powf停止此问题,因为编译器不必解决任何重载,但精度可能会由于此更改而丢失:

Rcpp::cppFunction("NumericVector vecpow(const NumericVector base, const NumericVector exp) {
  NumericVector out(base.size());
  std::transform(base.begin(), base.end(),
                 exp.begin(), out.begin(), ::powf);
    
  return out;
}
") -> pow
pow(1:5,5:1)
[1]  1 16 27 16  5

另一种解决方法是在替换中使用 static_cast::pow with static_cast<double(*)(double, double)>(::pow)告诉编译器使用double超载的pow

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

包中涉及std::transform的Rcpp代码的兼容性 的相关文章

  • 如何将R连接到MySQL?无法连接到数据库:错误:无法加载插件 caching_sha2_password

    我最近在计算机上安装了 MySQL 并尝试将 RStudio 连接到 MySQL 我按照书上的说明以及说明进行操作here http mdsr book github io excerpts mdsr dbadmin pdf 然而 每当我使
  • 在R中使用pandoc将.docx转换为.md时如何保留标题和副标题?

    我正在下载一个 docx 格式的 Google 文档 然后转换为 Markdown 进行操作并导出为多种格式 问题 当我使用 pandoc 进行转换时 它会删除标题 和副标题 并且不添加任何 YAML 标头信息 我可以在标头中手动添加标题
  • 在 R 中粘贴向量的所有组合

    我有一个向量说 vec c A B C 我想粘贴向量中每个项目的单个组合 得到结果 AB AC BC 我知道我可以使用outer来获得向量的所有可能的组合 但我对如何只获得上面的结果感到困惑 在这种情况下 顺序并不重要 因此结果也可能是 B
  • 无法使用 RODBC 附加到具有自动编号列的表

    我正在尝试使用 RODBC 将新行插入到 Microsoft Access 数据库中的表中 问题是主键列是一个自动编号 它似乎不允许我省略此列 我正在使用带有append TRUE 的sqlSave 函数和带有单行的数据框 我已经尝试过以下
  • 根据 r 中另一个数据帧中的列填充数据帧中的列

    我有一个评论数据框 如下所示 df1 Comments Apple laptops are really good for work we should buy them Apple Iphones are too costly we ca
  • 闪亮错误:参数暗示行数不同

    我正在尝试开发一个简单的应用程序 从 Kijiji 网站获取本地分类广告 我用几乎相同的脚本制作了一个类似的应用程序 但我没有收到下面描述的错误 所以我不知道这个脚本出了什么问题 我尝试了我能想到的一切 但无法让它发挥作用 的结构df数据框
  • 我们可以使用什么方法来重塑非常大的数据集?

    当由于非常大的数据计算将花费很长时间并且因此我们不希望它们崩溃时 事先知道要使用哪种重塑方法是很有价值的 Lately methods for reshaping data have been further developed regar
  • 如何获得 STAN 中最大似然估计的标准误差?

    我在 Stan 中使用最大似然优化 但不幸的是optimizing 函数不报告标准错误 gt MLb4c lt optimizing get stanmodel fitb4c data win data init inits STAN OP
  • 将循环转换为并行计算的函数

    我正在使用 R 编程语言 我遇到这个问题 我试图找出两个 shapefile 之间的成对交集 即第一个 shapefile 中的每个多边形与第二个 shapefile 中的所有多边形相交的百分比 我想我找到了解决这个问题的基本方法 Load
  • 从 R 中的向量中选择所有可能的元组

    我正在尝试用 R 编写一个程序 当给定一个向量时 将返回所有可能的tuples http en wikipedia org wiki Tuples该向量中的元素 例如 元组 c a b c c a b c 出租车 c a c c b c c
  • 计算例如具有多列 data.frames 的列表中的平均值

    我有几个 data frames 的列表 每个 data frame 有几列 通过使用mean mylist first dataframe a我可以得到这个 data frame 中 a 的平均值 但是我不知道如何计算列表中存储的所有 d
  • LDA with topicmodels,如何查看不同文档属于哪些主题?

    我正在使用 topicmodels 包中的 LDA 我已经在大约 30 000 个文档上运行它 获取了 30 个主题 并获得了主题的前 10 个单词 它们看起来非常好 但我想看看哪些文档属于哪个主题的概率最高 我该怎么做 myCorpus
  • 如何在for循环中引用变量?

    我正在循环访问不同的 data tables 和 data table 中的变量 但我在引用内部变量时遇到问题for loop dt1 lt data table a1 c 1 2 3 a2 c 4 5 2 dt2 lt data tabl
  • 在 R 中创建一个运行计数变量?

    我有一个足球比赛结果的数据集 我希望通过创建一组类似于世界足球 Elo 公式的运行评级来学习 R 我遇到了麻烦 在 Excel 中看似简单的事情在 R 中并不完全直观 例如 4270 个观察中的前 15 个具有必要的变量 date t 1
  • 如何用外部图像填充地图边界?

    我正在创建一张带有州边界的巴西地图 这可以直接使用ggplot2 and geom sf 然而 这一次 我不想用数据填充每个状态的颜色 而是想用外部图像 png 填充每个状态的边界 类似于this https online olivet e
  • 重复测量引导统计数据,按多个因素分组

    我有一个看起来像这样的数据框 但显然还有更多行等 df lt data frame id c 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 cond c A A B B A A B B A A B B A A B B co
  • R中的一元加/减是什么?

    来自 R 的详细信息部分Syntax http stat ethz ch R manual R patched library base html Syntax html帮助页面 定义了以下一元和二元运算符 他们被列出 在优先级组中 从最高
  • 在 R 中向散点图添加线条

    如何向图表添加线条 我做了以下 dat lt data frame xvar 1 20 rnorm 20 sd 10 yvar 1 20 rnorm 20 sd 10 zvar 1 20 rnorm 20 sd 10 plot dat 1
  • 纵向序列数据的三次样条方法?

    我有一个串行数据 格式如下 time milk Animal ID 30 25 6 1 31 27 2 1 32 24 4 1 33 17 4 1 34 33 6 1 35 25 4 1 33 29 4 2 34 25 4 2 35 24
  • 通过间接引用列来修改数据框中的某些值

    我正在整理一些数据 我们将失败的数据分类到垃圾箱中 并按批次计算每个分类箱的有限产量 我有一个描述排序箱的元表 这些行按升序测试顺序排列 一些排序标签带有非语法名称 sort tbl lt tibble tribble weight lab

随机推荐