繁体   English   中英

是否可以向函数传递用于创建全局矩阵的字符串?

[英]Is it possible to pass a function a string to be used to create a global matrix?

我正在使用基本SIR模型作为动机的生物入门课程中教授R编程。 在学生获得基本模型后,我希望他们改变参数以查看其如何改变感染动态。 下面的代码有效,但是每次运行都返回相同的名为“ dmatrix”:

function(steps,pop,IR,RR){ 
idmatrix <- matrix(c(seq(1,steps),rep.int(0,steps*4)),nrow=steps,ncol=5)
StoI <- function(x,y,z) {x*y*z}
ItoR <- function(z,r) {z*r}
idmatrix[1,2] <- pop - 1
idmatrix[1,3] <- 1
for ( i in 2:steps){
deltaS <- StoI(IR,idmatrix[i-1,2],idmatrix[i-1,3])
deltaI <- ItoR(idmatrix[i-1,3],RR)
idmatrix[i,2] <- idmatrix[i-1,2] - deltaS
idmatrix[i,3] <- idmatrix[i-1,3] + deltaS - deltaI
idmatrix[i,4] <- idmatrix[i-1,4] + deltaI
idmatrix[i,5] <- idmatrix[i,2] + idmatrix[i,3] + idmatrix[i,4]
}
dmatrix <<- idmatrix
}

我想添加选项以传递'runSIR'一个用于创建输出矩阵的字符串,如下所示:

function(output_matrix,steps,pop,IR,RR){ 
...
output_matrix <<- idmatrix
}

我探索了将“ output_matrix”识别为字符串的方法,但是我找不到找到将其实现为新矩阵名称的方法。 这可能吗?

谢谢! -凯文

只需从函数返回矩阵,然后在提示下进行分配即可。

infection = function(steps,pop,IR,RR){ 
...
return(idmatrix)
}

然后是:

model1 = infection(1000, 10, 0.4, 0.1)
model2 = infection(1000, 10, 0.5, 0.2)

然后比较model1model2对象。

鉴于您的职能:

f <- function(output_matrix,steps,pop,IR,RR){ 
...
assign(output_matrix, idmatrix, envir=.GlobalEnv)
}

应该这样做。 您需要指定GlobalEnv或在函数范围内创建变量,然后立即将其从内存中删除。

该技术称为“静默加载”,在R的其他地方使用,例如,在quantmod包的getSymbols(...)中使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM