如何使用代数公式作为 R 函数中的参数

问题描述 投票:0回答:1

我有一长串不同的大气蒸气压公式。我想通过编写一个使用公式作为参数的函数来更轻松地评估这些,并使用优化函数找到解决方案。没有函数的代码如下所示(作为示例):

  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 值。

r function eval quote
1个回答
0
投票

我找到了如下解决方案:

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
© www.soinside.com 2019 - 2024. All rights reserved.