我正在尝试将一些 Fortran 代码移至 R,以获得与化学动力学相关的有限差异。
示例 Fortran 循环:
DOUBLE PRECISION, DIMENSION (2000,2) :: data=0.0
DOUBLE PRECISION :: k1=5.0, k2=20.0, dt=0.0005
DO i=2, 2000
data(i,1) = data(i-1,1) + data(i-1,1)*(-k1)*dt
data(i,2) = data(i-1,2) + ( data(i-1,1)*k1*dt - data(i-1,2)*k2*dt )
...
END DO
类似的 R 代码:
k1=5
k2=20
dt=0.0005
data=data.frame(cbind(c(500,rep(0,1999)),rep(0,2000)))
a.fun=function(y){
y2=y-k1*y*dt
return(y2)
}
apply(data,2,a.fun)
这会覆盖我在数据框中的第一个值,并在其他地方留下零。我想运行这个矢量化而不使用 for 循环,因为它们在 R 中太慢了。此外,我的函数到目前为止只计算第一列。在第一列的语法正确之前,我无法让第二列正常工作。