包中涉及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代码的兼容性 的相关文章

  • 使用 pmap 迭代 tibble 的行

    我有一个非常简单的 tibble 我想迭代它的行以应用函数pmap功能 我想我可能误解了一些观点pmap函数 但我大多很难选择参数 所以 我想知道我是否应该使用rowwise在这种情况下函数pmap或不 不过我还没见过案例 另一个问题是使用
  • 在单词后获取文本——R Webscraping

    几周前 这里有人帮助我极大地获得了名人数据库中所有链接的列表 我能够运行此代码并获得以下输出 library purrr library rvest url base lt https www nndb com lists 494 0000
  • 如何在 R 中创建 for 循环来进行这种特殊的计算

    我无法弄清楚这种 显然 简单的操作 给定这两个不同的数据框df A nrow 10 ncol 3 和df B n行 3 n列 3 df A df B col1 col2 col3 col1 col2 col3 1 2 4 1 4 5 3 5
  • 如何将零件逐一添加到闪亮的图表中

    我正在尝试为我的统计课程制作一些演示 除此之外 我想展示所涉及的逐步过程 对于我正在寻找的简化示例 请考虑以下小玩具 R 函数 toyPlot lt function x lt 1 100 100 y lt x rnorm 100 0 0
  • 在 R 中从一条线偏移绘制一条平行线

    我有代表沿着一些街道行驶的线串 但我实际上想代表骑自行车者的旅程 它偏离线路 即他们在路边附近行驶 我正在努力思考如何去做 我制作了一段可重现的 R 代码来进行说明 Let s say I have a route along some s
  • R如何删除字符串中非常特殊的字符?

    我正在尝试删除字符串中的一些非常特殊的字符 我读过其他帖子 例如 从 R 中的字符串中删除所有特殊字符 https stackoverflow com questions 10294284 remove all special charac
  • R Notebook 预览中的奇怪字符

    当我预览 R Notebook 时 HTML 输出包含奇怪的字符 该块代码和输出 在 HTML 中呈现为 我应该如何解决这个问题 会话信息 R版本3 6 0 2019 04 26 平台 x86 64 w64 mingw32 x64 64位
  • 使用 R 和 rvest 进行网页抓取

    我正在尝试rvest学习使用 R 进行网页抓取 我正在尝试为页面的其他几个部分复制乐高示例并使用selector gadget to id 我从中提取了示例R Studio 教程 http blog rstudio org 2014 11
  • 控制绘图中 x 轴上出现哪些刻度线/标签?

    我想控制 X 轴上显示的刻度线 以下代码将刻度线放置在 5 的序列中 位于 5 10 15 30 library plotly df lt data frame x 1 30 y sample 100 300 size 30 replace
  • 如何在data.table中编写累积计算

    顺序累积计算 我需要进行时间序列计算 其中每行计算的值取决于上一行计算的结果 我希望能够利用data table 实际问题是水文模型 累积水平衡计算 在每个时间步长增加降雨量 并减去径流和蒸发作为当前水量的函数 该数据集包括不同的流域和场景
  • ggplot for 循环输出所有相同的图表

    我编写了一个 for 循环 它遍历数据帧的列并使用 ggplot 为每列生成一个图表 问题是输出的图表都是相同的 它们都是最后一列的图表 我使用的代码是 library gridExtra library ggplot2 test1 lt
  • rbind 命名向量到不同长度的矩阵

    我正在尝试将命名向量绑定到矩阵上 命名向量的长度与矩阵不同 gt m lt matrix data c 1 2 3 nrow 1 ncol 3 dimnames list c c column 1 column 2 column 3 gt
  • 将 R 包函数导出到 R 包内的并行集群

    有一些功能 比如function1 在我正在开发的 R 包中 它依赖于辅助函数 例如h function1 and h function2 在我的包裹里 我正在并行化重复调用function1在我的包中的另一个函数中 目前 在我的包中我正在
  • ggplot2:从纵横比中排除图例

    I use ggplot2 and knitr发布带有右侧图例的散点图 图例包含在纵横比中 因此破坏了绘图的 方形 如图所示默认主题 https github com hadley ggplot2 wiki themes 当图例文本变得比
  • 在 ubuntu 18.04 仿生中安装 TDA 时出错

    我尝试在 R 中安装 TDA 但出现错误 make diag o 错误 1 错误 包 TDA 编译失败 删除 usr local lib R site library TDA i p 中的错误 我尝试 sudo yum install gm
  • R chron times() 函数不起作用

    我正在尝试将时间转换为自午夜以来的秒数 我很难从 chron 包中获取 times 函数来工作 我的使用方法如下 gt library chron gt 24 24 60 times 50 Error in 24 24 60 times 5
  • 多维数组到数据框

    R 中的以下问题对你们中的许多人来说可能看起来很简单 但由于我对此相对较新 如果您能帮助我 那将非常有帮助 我想本质上编写一个多维 3 个维度 数组作为我可以更轻松地操作的数据框 我正在处理 1891 年 1 月 1 日至 2015 年 1
  • data.table 逐行求和、平均值、最小值、最大值,如 dplyr?

    还有其他关于数据表上的行式运算符的帖子 他们要么是太简单 https stackoverflow com questions 7885147 efficient row wise operations on a data table或解决一
  • R ggplot2:stat_count() 不得与条形图中的 y 美学错误一起使用

    我在绘制条形图时遇到此错误 并且无法摆脱它 我已经尝试了 qplot 和 ggplot 但仍然出现相同的错误 以下是我的代码 library dplyr library ggplot2 Investigate data further to
  • ShinyApp:由对等方重置连接

    我之前构建的闪亮应用程序在我的旧笔记本电脑上运行良好 最近我买了一台装有Windows10的新笔记本电脑 设置完所有内容后 我尝试运行该应用程序 但浏览器立即打开并关闭 并出现错误 正在收听http 127 0 0 1 5004 http

随机推荐