RcppEigen - 从包中的内联函数到 .cpp 函数和“Map”

2024-04-17

一切似乎都在我的包中工作,但我想检查其步骤是否正确以及使用“Map”的内存使用情况。 (这是一个简单的示例,位于内联示例和fastLm()例子。)

这是一个内联函数,它取矩阵每一列的最大值:

library(Rcpp); 
library(inline); 
library(RcppEigen);

maxOverColCpp <- '
    using Eigen::Map;
    using Eigen::MatrixXd;

   // Map the double matrix AA from R
   const Map<MatrixXd> A(as<Map<MatrixXd> >(AA));

   // evaluate and columnwise maximum entry of A
   const MatrixXd Amax(A.colwise().maxCoeff());
   return wrap(Amax);
'

rcppeigen_max_over_columns <- cxxfunction(signature(AA = "matrix"), maxOverColCpp, plugin = "RcppEigen")

然后,为了更改该函数以将其包含在现有的 R 包中,我重写了代码,如下所示,将其保存在rcppeigen_max_over_columns.cpp在一个新的src现有 R 包中的文件夹:

// we only include RcppEigen.h which pulls Rcpp.h in for us
#include <RcppEigen.h>

// via the depends attribute we tell Rcpp to create hooks for
// RcppEigen so that the build process will know what to do
//
// [[Rcpp::depends(RcppEigen)]]

// via the exports attribute we tell Rcpp to make this function
// available from R
//
// [[Rcpp::export]]
Eigen::MatrixXd rcppeigen_max_over_columns(const Eigen::MatrixXd & A){
    Eigen::MatrixXd Amax = A.colwise().maxCoeff();
    return Amax;
}

(事实上​​,它有点长,因为我还需要找到行数的最大值。)

Then:

  • 用以下行修改了描述文件:

    导入:Rcpp (>= 0.11.3)、RcppEigen (>= 0.3.2.2.0)

    链接到:Rcpp、RcppEigen

  • 使用以下行修改 NAMESPACE 文件:

    useDynLib(toyRpackage)

    导入(RcppEigen)

    importFrom(Rcpp, evalCpp)

  • 在 R 终端中,输入以下内容,我认为它粘合了 R 和 C++:

    Rcpp::compileAttributes(pkgdir="toyRpackage", verbose=getOption("verbose"))

然后对于普通包裹,我做了R CMD check and R CMD build.

  • 第一个问题是将 RcppEigen 函数包含到现有 R 包中的过程是否正确? (我完全忽略了任何Makevars文件或任何.h文件——我真的不知道它们是做什么的...也不太理解对 NAMESPACE 文件的更改。我尝试复制RcppEigen.package.skeleteon()设置,但我将我的功能添加到现有的包中。所以最好知道是否可以,以防万一我错过了一些以后可能会出现问题的东西。)

  • 第二个问题是我是否需要某个地方的“地图”rcppeigen_max_over_columns.cpp这样当矩阵从 R 传递到 C++ 时就不会被复制?

我知道这是一个初学者问题,但我在理解 .cpp 文件中的语法时遇到了一些困难,因为我不懂 C++。我想也许这个问题可能会帮助其他也尝试向其包中添加简单功能的人。 :)

另外,如果您对使用 RcppEigen 而不是 RcppArmadillo 有任何强烈的感受,请告诉我。我读http://thread.gmane.org/gmane.comp.lang.r.rcpp/3522 http://thread.gmane.org/gmane.comp.lang.r.rcpp/3522这很有用。对于我在列上取最大值的示例,RcppEigen 似乎更快,不知道为什么。


第一个问题是将 RcppEigen 函数包含到现有 R 包中的过程是否正确? (我完全忽略了任何 Makevars 文件或任何 .h 文件 - 我真的不知道它们的作用...也不太了解 NAMESPACE 文件的更改。我尝试复制 RcppEigen.package.skeleteon( )设置,但我正在将我的函数添加到现有的包中。因此,最好知道它是否可以,以防万一我错过了以后可能会出现问题的东西。)

对于具有相对简单的 C++ 代码的基本 R 包,您不需要包含头文件、自定义 Makevars / Makefile 或类似的内容。如果您构建更复杂的东西,您可能需要 Makefile / Makevars 来帮助处理构建过程,并且可能希望使用头文件将接口与实现分开 - 但为此,您必须深入研究并挑选一些 C++ 书籍,因为有很多东西要学。

换句话说——你所做的一切都很好。对于简单的情况,只需使用就可以了.cpp文件在src/目录(并让Rcpp、属性及其其他兄弟包处理其余部分)

第二个问题是我是否需要 rcppeigen_max_over_columns.cpp 中的某个位置有一个“Map”,以便矩阵在从 R 传递到 C++ 时不会被复制?

好吧,当将 R 对象传输到(非Rcpp) 类,除非您专门使用可以重用底层数据的构造函数。我不知道 Eigen 是否有一个可以重用内存的构造函数,但我建议除非你know这很重要,不用担心(因为复制一系列数据通常非常快)

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

RcppEigen - 从包中的内联函数到 .cpp 函数和“Map” 的相关文章

  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • 条件字体颜色 R Markdown

    我无法找到一种方法来根据变量的值 gt 0 0 或 r setup include FALSE x lt 4 This is an R Markdown document r if x gt 0 textcolor red Markdown
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • 重载<<的返回值

    include
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 无法更改 RStudio 中的 R 版本

    我的 RStudio V 0 99 491 无法更改 R 版本 我以平常的方式行事Global Options gt R Version 然后它挂起并且不再工作或反应 R 运行良好的初始版本是R 3 1 0 我以前从未遇到过这样的问题 也许
  • 如何修复 R 中 Kaplan Meier 图的风险表计算错误

    以下是一个数据帧 其中 6 个参与者中的每一个都有唯一的 record ID 我想绘制一个生存分析图 其中包含感兴趣事件的复发以及在时间间隔 tstart 到 tstop 内 暴露 药物剂量 数值变量 的时间依赖性协变量 每个参与者的最大
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 在 ifelse() 语句内部和外部运行一行时的不同输出

    我正在尝试运行一个简单的命令 但不知道为什么在内部和外部运行它时输出不同ifelse 功能 函数条件评估为FALSE 所以输出应该完全相同 但是 单独运行时 输出为0 0 1 1 0 1 0 1 NA 根据需要 但是从ifelse 函数 输
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • 在 Shiny 中的用户会话之间共享反应数据集

    我有一个相当大的反应数据集 该数据集是通过轮询文件然后按预定义的时间间隔读取该文件而派生的 数据更新频繁 需要不断重新加载 诚然 重新加载可以增量完成并附加到 R 中的现有对象 但事实并非如此 然而目前 尽管会话中的数据相同 但此操作是针对

随机推荐

  • 如何读取iPhone设备控制台的内容?

    当设备通过 Xcode 插入我的机器时 我可以读取控制台 我需要构建一种方式来读取控制台 以便测试用户从设备获取控制台输出消息和崩溃报告 然后通过电子邮件对话框向其发送电子邮件 iOS 上是否存在控制台日志和崩溃报告所在的标准文件位置 控制
  • 如何在 Android 模拟器中连接 localhost? [复制]

    这个问题在这里已经有答案了 我在里面做了一个php脚本本地主机我将其与httpClient但我遇到了问题 请告诉我如何连接到 php 文件本地主机从模拟器 Use 10 0 2 2访问您的实际机器 正如您所知 当您使用模拟器时 localh
  • 意外的特质行为

    给定一个简单的代数数据类型Parent scala gt sealed trait Parent defined trait Parent scala gt case object Boy extends Parent defined ob
  • 当我通过列表映射时,React-bootstrap Modal 组件打开/关闭所有模态

    编程新手 所以如果我的措辞不正确 我很抱歉 我使用 map 来渲染和列出数组中的每个项目 对于每个项目 我希望模态仅打开 关闭与数组中每个项目相对应的特定模态 但是 当我单击按钮打开模式时 每个模式都会打开和关闭 我相信这是因为模态全部设置
  • 今天我们可以分享一下 App 类吗 - Widget-Extension

    我正在开发一个应用程序 我必须在 Today Widget Extension 中使用我的一些类 但我没有任何方式访问这些课程 是否可以访问 Today Widget Extension 中的应用程序类 有可能的 首先 您需要将类的目标设置
  • 如何在 Python 中使用 PKCS12 对 RSA 密钥进行编码?

    我正在使用 Python 在 Google App Engine 下 并且我有一些需要以 PKCS 12 格式导出的 RSA 私钥 有什么可以帮助我的吗 我正在使用 PyCrypto KeyCzar 并且我已经弄清楚如何以 PKCS8 格式
  • Mocha 在所有类中的所有测试运行后运行

    所以我正在使用 mocha 并且我有超过 10 个 JS 类的测试 我构建了一个日志变量 该变量在这 10 个类的整个测试运行过程中都有效 现在我想做的是在最后一次测试运行后 我想将此日志写入文件 所以我做的第一件事就是在每堂课上写这样的东
  • VBA getElementById 不适用于按钮

    我正在尝试访问网站 在文本框中键入一个值 然后单击搜索按钮来搜索我的值 我的问题是 我无法获取按钮元素来触发单击事件 VBA Dim i As Long Dim objElement As Object Dim objCollection
  • 如何符合协议变量的设置和获取?

    我正在研究协议以及如何遵守它们 protocol Human var height Int get set struct Boy Human var height Int return 5 error 我正在尝试学习实现 set 和 get
  • Firebase Storage 共享下载网址存在安全风险吗?

    我的 Firebase 存储中保存了一张图像 我想在我发送的多封电子邮件中显示此图像 到目前为止 我已使用从 Firebase 控制台获取的下载 URL 并且图像成功显示 我的问题是 这是分享图像的正确方式吗 安全吗 如果没有 那么我应该如
  • JsonValueProviderFactory 抛出“请求太大”

    我收到一个异常 即 JSON 请求太大而无法反序列化 它来自 JsonValueProviderFactory MVC 应用程序当前有一个使用 Json Net 的自定义模型绑定器 它在反序列化 json 数据时没有问题 但是我假设默认的
  • 什么是 AsyncManager.OutstandingOperations?

    感谢 MSDN 他们没有对此进行任何解释 http msdn microsoft com en us library system web mvc async asyncmanager outstandingoperations v vs
  • 如何使用 JavaSound (Java, Java Sound) 从 .wave 文件读取信息

    您好 我需要从 wave 文件中读取采样率 信号频率和幅度 我怎样才能使用 JavaSound 做到这一点 您可以通过获取句柄来获取采样率AudioFormat object AudioInputStream audioInputStrea
  • Phonegap + jQuery Mobile + 股票/折线图

    我试图找到一个在phonegap应用程序中绘制折线 股票图表的解决方案 我尝试过很多库 amcharts JS highcharts 但没有一个能工作 有人可以帮我完成这项任务吗 欢迎任何解决方案 平台 Android iOS 我有同样的问
  • 通过电子邮件询问评级

    在我的应用程序中 我们将通过向用户发送电子邮件来获取反馈 因此 如果用户填写字段并提交 那么我会将其存储在我的数据库中 我准备了一封 html 邮件 如下所示 但这里的问题是我无法在邮件中显示评级星星 这需要内联 css 但我无法将该 cs
  • AdMob 横幅不适用于移动数据

    我最近开始开发 Android 应用程序 当尝试在我的应用程序中加载横幅时 我在 logcat 中收到以下错误 03 02 17 30 58 509 I Ads 12181 Use AdRequest Builder addTestDevi
  • 给出源时,Django Rest Framework Serializer charfield 不更新

    我有一个带有选择 charfield 的模型字段 class Vehicle models Model name models CharField max length 100 STATUS CHOICES N New U Used P J
  • 如何在 Visual Studio Code 中更新 C# 版本?

    我已经安装了 C 扩展 我的 NET 框架已更新 但我无法修复它 我已经找到了修复方法 希望这对将来的人有所帮助 找你的 csproj file 将 LangVersion 属性更改为所需版本
  • AMD64 ABI 中的空类会发生什么情况?

    我正在看AMD64 ABI http www cs tufts edu comp 40 readings amd64 abi pdf并且它似乎没有指定如何传递空类类型 对于空类成员函数 似乎this照常传递 但对于空类 Clang 生成的代
  • RcppEigen - 从包中的内联函数到 .cpp 函数和“Map”

    一切似乎都在我的包中工作 但我想检查其步骤是否正确以及使用 Map 的内存使用情况 这是一个简单的示例 位于内联示例和fastLm 例子 这是一个内联函数 它取矩阵每一列的最大值 library Rcpp library inline li