我有一长串不同的大气蒸气压公式。我想通过编写一个使用公式作为参数的函数来更轻松地评估这些,并使用优化函数找到解决方案。没有函数的代码如下所示(作为示例):
es <- function(ta){6.1121 * exp(((18.678 - ta/234.5) * ta)/(ta + 257.14)) * 100}
ea <- es(ta) * rh/100
result <- optimize(function(ta){abs(es - es(ta))}, c(-100,100), tol = 0.00001)$minimum
“es”函数中括号内的公式是我想用作参数的公式。我尝试过的一些代码如下所示:
formula <- '6.1121 * exp(((18.678 - ta/234.5) * ta)/(ta + 257.14)) * 100'
iterative_Td <- function(formula, ta, rh){
es <- function(ta){
substitute(formula)}
ea <- es(ta) * rh/100
return(optimize(function(ta){abs(ea - es(ta))}, c(-100,100), tol = 0.00001)$minimum)}
如何引用 iterative_Td 函数中的公式来实现此目的?我尝试过引用、评估和替代的各种配置。它们都不起作用。谢谢你。
编辑:为了测试,ta 的值为 20,rh 的值为 50 就可以了。您应该得到 9.2506 的 Td 值。
我找到了如下解决方案:
formula <- '6.1121 * exp(((18.678 - ta/234.5) * ta)/(ta + 257.14)) * 100'
ta = 20
rh = 50
iterative_Td <- function(formula, ta, rh){
es <- function(ta){
parse(text = formula) }
ea <- eval(es(ta)) * rh/100
return(optimize(function(ta){abs(ea - eval(es(ta)))}, c(-100,100), tol =
0.00001)$minimum)}
> iterative_Td(formula,20,50)
[1] 9.270961