如何在 R 中制作这个函数?

How to craft this function in R?

我目前正在尝试编写一个函数,通过 E = e21.44 * (e(8.74901^10−20 / (1.3806488*10−23 *T) 估算某些蜥蜴的能量消耗。等式中的 T等于开尔文温度。我知道如果我插入 20ºC 的温度,函数应该给我大约 0.829 的输出。但是,当我 运行 函数(见下文)时,我得到 2.628622 e-121。我相信这就是我说明温度从摄氏度转换为开尔文的方式是不正确的,我目前坚持使用它。

TempKelvin <- 273.15
Energy = function(TempKelvin = 273.15 {
exp(24.11) * exp(-8.74901*10^20 / (1.3806488*10^-23 * (T + TempKelvin)))
}
Energy(T = 28)

欢迎来到 SO!如果给定摄氏度,先转换为开尔文然后计算公式如何,然后您可以从那里缩小问题范围。我猜 -8.7..8.7...

存在括号问题或符号问题
Energy <- function(temp_c) {
  temp_k <- temp_c + 273.15
  energy <- exp(21.44) * exp(-8.74901*10^20 / (1.3806488*10^-2 * temp_k))
  print(energy)
  }
Energy(28)
#[1] 0

有几个问题:

  • Energy 函数的调用使用了 T 参数,但问题中定义的该函数没有 T 参数
  • T 在 R 中也表示 TRUE。使用不同的名称。 T 除非被覆盖,否则在数字上下文中使用时将被解释为 1。例如T+8 在 R 中默认等于 9
  • 问题中的公式使用 8.74901,但代码使用该值的负数。哪个是正确的?
  • 对 R 常数使用正确的指数表示法,例如1.38064852e−23
  • Boltzmann constant(温度的乘积)部分数字不正确。
  • 虽然添加 273.15 是正确的摄氏度到开尔文转换公式,但我注意到如果我们使用 273 而不是更准确的 273.15,那么我们确实得到了假设的答案。

请注意,因为答案取决于 celsius 和 273.15 仅通过它们的总和,我们可以得到使用 273 而不是 273.15 的效果,如下所示:

celsius + 273 
= (celsius - 0.15) + 273.15

传递函数 20-0.15 而不是 20 有效地使用 20 和 273 而不是使用 20 和 273.15 。

Energy <- function(celsius) {
  exp(21.44) * exp(-8.74901e−20 / (1.38064852e−23 * (celsius + 273.15)))
}

# match assumed answer (despite assumed answer being slightly wrong)
Energy(20 - 0.15)  
## [1] 0.8289531

# correct answer
Energy(20)
## [1] 0.8381777