【问题标题】:How to craft this function in R?如何在 R 中制作这个函数?
【发布时间】:2019-12-01 05:26:09
【问题描述】:

我目前正在尝试编写一个函数,通过 E = e21.44 * (e(8.74901^10−20 / (1.3806488*10−23 *T) 估算某些蜥蜴的能量消耗。等式中的 T 等于到开尔文的温度。我知道如果我要插入 20ºC 的温度,该函数应该给我大约 0.829 的输出。但是,当我运行该函数(见下文)时,我得到 2.628622e-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)

【问题讨论】:

  • 编辑:exp(21.44) 而不是 (24.11)

标签: r function average temperature exp


【解决方案1】:

有几个问题:

  • 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

【讨论】:

    【解决方案2】:

    欢迎来到 SO!如果给你摄氏度,那么先转换成开尔文然后做公式怎么样,那么你可以从那里缩小问题的范围。我猜-8.7.. vs 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
    

    【讨论】:

    • -8.7... 属于那里。它基于一个公式。所以当我插入 20 摄氏度时,函数应该输出 0.829
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多