我剛剛開始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
求解試圖解決常微分方程(常微分方程)的系統,但是使用Rcpp
包在編譯代碼中寫入ODE的右側。求解器預計形成微分方程的RHS的功能,在這種情況下,從一個.R
函數返回一個列表,特別是RHS(該解算器能夠成功G642.44各級)是形式
> 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;
}
該函數返回時(我公司供應的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 ...
謝謝您的建議!
你到目前爲止嘗試過什麼?你是否實例化了一個'Rcpp :: List'對象? –
感謝您的回覆,我已經實例化了一個Rcpp :: List,但我認爲還有一個問題,'odes'和'X'在結構上並不完全相同,我不確定爲什麼'> str(odes) 名稱num [1:7] 1 2 3 4 5 6 7 - attr(*,「names」)= chr [1:7]「A」「B」「C」「D」... > str(X) 列表1 $:命名的數字[1:7] 9e + 06 -9e + 06 0e + 00 2e + 04 -2e + 04 ... ..- attr(*,「 「)= chr [1:7]」A「」B「」C「」D「...',而'X'是1的列表,'odes'是'Named' – SN248
我試過使用'List odes(1);',然後'odes [1](0)= 1.0',我意識到這給出了一個沒有'names'的列表,但基本上我想要一個'list'列表,它的形式'X'高於 – SN248