在 Rcpp 中连接和列出
Concatenate and Lists in 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 形成为 return 列表的函数,特别是在这种情况下,来自 .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;
}
此函数 returns(当我提供 t
、p
和 A
的某些值时)如下,
> 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>
输入向量,输出列表。查看 Rcpp 示例,例如 Rcpp Gallery 站点。
原来我以错误的方式创建了 List
,我不得不删除以下内容
List odes(1);
and List(odes_vec);
and return (odes);
并且必须在末尾添加以下语句
return Rcpp::List::create(odes_vec);
可以找到更好的解释here
我刚开始 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 形成为 return 列表的函数,特别是在这种情况下,来自 .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;
}
此函数 returns(当我提供 t
、p
和 A
的某些值时)如下,
> 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>
输入向量,输出列表。查看 Rcpp 示例,例如 Rcpp Gallery 站点。
原来我以错误的方式创建了 List
,我不得不删除以下内容
List odes(1);
and List(odes_vec);
and return (odes);
并且必须在末尾添加以下语句
return Rcpp::List::create(odes_vec);
可以找到更好的解释here