我有一个关于如何为 ODE 模型拟合参数的 R 脚本。它在 R 中运行良好。以下是我在 R 中的代码:
library(ggplot2)
library(reshape2)
library(deSolve)
library(minpack.lm)
#load concentration data
df=read.table("Test.txt")
names(df)=c("time","ca","cb","cc")
# prediction of concentration
# rate function
rxnrate=function(t,c,parms){
k1=parms$k1
k2=parms$k2
r=rep(0,length(c))
r[1]=-k1*c["A"] #dcA/dt
r[2]=k1*c["A"]-k2*c["B"]
return(list(r))
}
# function that calculates residual sum of squares
ssq=function(parms){
# inital concentration
cinit=c(1,2)
# time points for which conc is reported
# include the points where data is available
t=c(seq(0,5,0.1),df$time)
t=sort(unique(t))
# parms from the parameter estimation routine
k1=parms[1]
k2=parms[2]
# solve ODE for a given set of parameters
out=ode(y=cinit,times=t,func=rxnrate,parms=list(k1=k1,k2=k2))
# Filter data that contains time points where data is available
outdf=data.frame(out)
outdf=outdf[outdf$time %in% df$time,]
# Evaluate predicted vs experimental residual
preddf=melt(outdf,id.var="time",variable.name="species",value.name="conc")
expdf=melt(df,id.var="time",variable.name="species",value.name="conc")
ssqres=preddf$conc-expdf$conc
# return predicted vs experimental residual
return(ssqres)
}
# parameter fitting using levenberg marquart algorithm
# initial guess for parameters
parms=c(k1=0.5,k2=0.5)
# fitting
fitval=nls.lm(par=parms,fn=ssq)
# Summary of fit
summary(fitval)
# Estimated parameter
parest=as.list(coef(fitval))
# mean error
ms=sqrt(deviance(fitval)/dof)
ms
当前阶段,我需要从 C# 访问结果(例如 parest 和 ms)。我可以生成 R 和 C# 之间的连接。但是,我不知道如何使用 C# 代码来获取这些值。
static void Main(string[] args)
{
REngine.SetEnvironmentVariables();
REngine engine = REngine.GetInstance();
engine.Evaluate("source('myScript path')");
}
在此之后,我需要使用什么来要求结果?
谢谢洪