【问题标题】:R: use equation written as a string as an actual equationR:使用写成字符串的方程作为实际方程
【发布时间】:2018-02-08 21:01:34
【问题描述】:

有没有人知道如何使用以字符串形式给出的方程作为 R 中的实际方程或公式?

我有一个数据库,其中包含异速生长方程(您可以使用它来计算/估计树木的生物量),以及有关它们所针对的位置和物种的信息。我还有另一个带有观察物种的大型观察数据集;所以我遍历所有这些物种及其位置以找到每个物种的异速生长方程,这些方程可能非常不同[这只是为了表明这不是一次性练习,所以我不能使用非常具体的方法]。然后我想使用我观察到的数据集(包括树木的直径和高度)来计算生物量——但我不知道如何实际使用异速方程数据库中的表达式。请参阅下面的一个非常简短的示例。

X   Z   Equation                                    Genus       Species
DBH NA  0.1731*X^(2.0296)                           All         All
DBH NA  0.1027*X^(2.4798)                           All         All
DBH H   (-4.58643+1.90532*log10(X)+1.0646*log10(Z)) Tectona     grandis
DBH H   (-4.58643+1.90532*log10(X)+1.0646*log10(Z)) Tectona     grandis
DBH NA  0.000189*X^(2.262)                          Dalbergia   melanoxylon
DBH H   0.0763*X^(2.2046)*Z^(0.4918)                All         All

假设我观察到的数据中有 Tectona grandis,我希望能够提取 -4.58643+1.90532*log10(X)+1.0646*log10(Z) 并将其与观察到的 X(直径)和 Z(高度)一起使用。

我需要某种“通用”解决方案,因为我要处理很多物种和很多不同的方程。我知道如何选择实际方程,但我将它作为一个因素 - 我如何操作它?我可以吗?

【问题讨论】:

  • 实际的XZ 数值是否在同一个数据框中?还是您在其他地方查找它们?如果您在示例中包含数字 XZ 会有所帮助。
  • 是的,X 和 Z 是记录在观察数据中的树木直径和高度(与该数据库分开),作为数值。我认为实际提取这些并在方程式中使用它们对我来说不是问题
  • 测试这个:x = "-4.58643+1.90532*log10(X)+1.0646*log10(Z)"; X = 2; Z = 5; eval(parse(text = x))
  • 太棒了,这行得通!您可以将其添加为答案,以便我可以投票并将其解决为答案吗?没想到这么简单!

标签: r formula equation


【解决方案1】:

您可以同时使用evalparse 将字符转换为表达式,然后对其求值。我应该指出,这不是一个好的做法。但是,您可以尝试以下示例:

#Your equation
x = "-4.58643+1.90532*log10(X)+1.0646*log10(Z)"

#Values you want to plug into x
X = 2
Z = 5

#Evaluate x
eval(parse(text = x))
#[1] -3.268748

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2022-12-29
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-25
相关资源
最近更新 更多