如何解决如何在R中为警告创建条件
我正在尝试创建一个“ for”循环,其中100个试验中的每个试验都有一组参数,每个参数都是从概率分布中随机选择的。从那里,模型将接收这些参数并吐出输出。输入和输出将存储在矩阵中,每行代表一次成功运行。最终,此矩阵将转换为数据帧。我在下面显示了一种for循环的运行示例:
#matrix M will have 100 rows for each trial,and 4 columns
#columns will be a val,b val,c val and output
M <- matrix(0,nrow=100,ncol=4)
for (i in 1:100){
#random values for a,b,c for 1st trial
a =runif(1)
b=runif(1)
c=runif (1)
v <- c(a,c)
#some model
output[i]=v[1]*v[2]/v[3]
M[i,4]=output[i]
#don't know how to populate first 3 columns with all diff values of a,c
}
我知道此代码将不起作用,但这是我的第一个问题。如何获得a,b和c值以在每次试验之间重新生成,以便为每个试验获得新的输出。从那里,我非常确定我知道如何将它们存储在矩阵中。
我的最后一个问题是关于警告消息。如果我因为某个试用版未生成输出而发出警告消息(此试用版没有问题,但是如果我必须除以0或某物)...我怎么能告诉程序跳过该试用版并继续进行下去直到我们进行100次工作试用?
请评论我是否应编辑或澄清以上内容。预先感谢。
解决方法
要回答第一个问题,您可以先生成参数向量,然后将函数应用于每个参数集。
ntrials <- 100
M <- matrix(0,nrow=ntrials,ncol=4)
## Generate parameter vectors
M[,1] <- runif(ntrials)
M[,2] <- runif(ntrials)
M[,3] <- runif(ntrials)
## Example model function
run_mod <- function(a,b,c) {
return(a+b+c)
}
## Create output
M[,4] <- run_mod(a = M[,1],b = M[,2],c = M[,3])
要解决第二个问题,可以使用while
语句继续生成参数集并尝试获取有效的模型结果,直到获得足够的有效结果为止。您的模型函数将需要一种处理可能发生的错误或警告的方法,例如tryCatch()
。
## Example model function with error handling
run_mod <- function(a,c) {
tryCatch(
a+b+c,error = function(e) print("Error"),warning = function(w) print("Warning")
)
return(a+b+c)
}
i <- 0
while(i < ntrials) {
## Generate a single set of parameters
a <- runif(1)
b <- runif(1)
c <- runif(1)
## Example error
if(floor(100*a) %% 2 == 0) {
a <- "Bad parameter"
}
## Try running your model
output <- run_mod(a,c)
## If successful,save output and move on to the next set
if(!is.character(output)) {
M[i,1] <- a
M[i,2] <- b
M[i,3] <- c
M[i,4] <- output
i <- i + 1
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。