c++ - 在 Rcpp 中连接和列出

标签 c++ r rcpp

我刚刚开始使用 Rcpp,所以这可能是一个非常愚蠢的问题。这是具体问题(上下文在下面提供)

什么是 Rcpp 等同于

odes <- c(A = 1.0, B = 2.0, C = 3.0, D = 4.0, E = 5.0, F = 6.0, G = 7.0)
list(odes)

上下文 - 我正在尝试使用 deSolve 包的 vode 求解器求解常微分方程 (ODE) 系统,但使用 Rcpp在编译代码中编写 ODE 右侧的包。求解器期望构成 ODE 的 RHS 的函数返回一个列表,特别是在这种情况下,来自 .R 函数(求解器能够成功集成)的 RHS 的形式为

> X
[[1]]
     9000000.00     -9000000.00            0.00        19993.04       -19993.04       -19993.04     -9000000.00 

并且我希望我的 .cpp 文件以类似形式的列表形式输出 odes

如有任何帮助,我们将不胜感激!!

按照下面的建议,我粘贴代码以准确显示我在做什么

#include <Rcpp.h>
using namespace Rcpp;

// This is a simple example of exporting a C++ function to R. You can
// source this function into an R session using the Rcpp::sourceCpp 
// function (or via the Source button on the editor toolbar). Learn
// more about Rcpp at:
//
//   http://www.rcpp.org/
//   http://adv-r.had.co.nz/Rcpp.html
//   http://gallery.rcpp.org/
//

// [[Rcpp::export]]
List odes_gprotein(double t, NumericVector A, NumericVector p) {

  NumericVector odes_vec(A.length());
  List odes(1);

  double Flux1 = p[1] * A[4] * A[5] - p[0] * A[3];
  double Flux2 = p[2] * A[5] - p[3];
  double Flux3 = p[4] * A[3];
  double Flux4 = p[5] * A[1] * A[6];
  double Flux5 = p[6] * A[0] * A[3];
  double Flux6 = p[7] * A[2];

  odes_vec[0] = (Flux4 - Flux5);
  odes_vec[1] = (-Flux4 + Flux6);
  odes_vec[2] = (Flux5 - Flux6);
  odes_vec[3] = (Flux1 - Flux3);
  odes_vec[4] = (-Flux1);
  odes_vec[5] = (-Flux1 - Flux2);
  odes_vec[6] = (-Flux4 + Flux5);

  odes = List(odes_vec);
  return odes;
}

此函数返回(当我提供 tpA 的一些值时)以下内容,

> Rcpp::sourceCpp('odes_gprotein.cpp')
> X <- odes_gprotein(0,IC,p)
> str(X)
List of 7
 $ : num 9e+06
 $ : num -9e+06
 $ : num 0
 $ : num 19993
 $ : num -19993
 $ : num -19993
 $ : num -9e+06

而我需要的是上面提到的X

> X
[[1]]
     9000000.00     -9000000.00            0.00        19993.04       -19993.04       -19993.04     -9000000.00 

在哪里

str(X)
List of 1
 $ : num [1:7] 9e+06 -9e+06 0e+00 2e+04 -2e+04 ...

感谢您的建议!

最佳答案

我们仍然不知道你想要什么或尝试过什么,但这里有一个最基本的存在证明:

R> cppFunction('List mylist(IntegerVector x) { return List(x); }')
R> mylist(c(2:4))
[[1]]
[1] 2

[[2]]
[1] 3

[[3]]
[1] 4

R> 

输入 vector ,输出列表。查看 Rcpp 示例,例如 Rcpp Gallery网站。

关于c++ - 在 Rcpp 中连接和列出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30134007/

相关文章:

c++ - fastnlmeanfilter 链接错误

android - OpenCV无法为ARM64目标构建(Android)

c++ - 哪种图像处理技术?

r - 如何在 R 中找到某个观察结果最后一次出现后的日期?

使用 Rcpp 重写 R 的 cummin() 函数并允许使用 NA

c++ - 在 Rcpp (Armadillo) 函数中使用数字序列作为默认参数

c++ - 考虑到干净代码的性能,什么更好

r - 从 r 中的数据帧中制作大小为 n/2 和 2 列的列表

r - 通过自定义行分隔符聚合

r - 分配 n 个 NumericMatrix 的 Rcpp 列表