[英]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)
然后比较model1
和model2
对象。
鉴于您的职能:
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.