R:使用写成字符串的等式作为实际等式
R: use equation written as a string as an actual equation
有谁知道如何使用以字符串形式给出的方程作为 R 中的实际方程或公式?
我有一个数据库,其中包含异速生长方程(您可以使用它来计算 calculate/estimate 树木的生物量),以及有关它们开发的地点和物种的信息。我还有另一个包含观察物种的大型观察数据集;所以我遍历了所有这些物种及其位置,以找到每个物种的异速生长方程,这些方程可能非常不同 [这只是为了表明这不是一次性的练习,所以我不能使用非常具体的方法]。然后我想使用我观察到的数据集(包括树木的直径和高度)来计算生物量 - 但我不知道如何实际使用异速生长方程数据库中的表达式。请参阅下面的一个非常简短的示例。
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
(身高)。
我需要某种 "generic" 解决方案,因为我要处理很多物种和很多不同的方程式。我知道如何 select 实际方程式,但后来我把它作为一个因素——我该如何操作它?我可以吗?
您可以同时使用eval
和parse
将字符转换为表达式,然后对其求值。我应该指出,这不是一个好的做法。但是,这里有一个您可以尝试的示例:
#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
有谁知道如何使用以字符串形式给出的方程作为 R 中的实际方程或公式?
我有一个数据库,其中包含异速生长方程(您可以使用它来计算 calculate/estimate 树木的生物量),以及有关它们开发的地点和物种的信息。我还有另一个包含观察物种的大型观察数据集;所以我遍历了所有这些物种及其位置,以找到每个物种的异速生长方程,这些方程可能非常不同 [这只是为了表明这不是一次性的练习,所以我不能使用非常具体的方法]。然后我想使用我观察到的数据集(包括树木的直径和高度)来计算生物量 - 但我不知道如何实际使用异速生长方程数据库中的表达式。请参阅下面的一个非常简短的示例。
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
(身高)。
我需要某种 "generic" 解决方案,因为我要处理很多物种和很多不同的方程式。我知道如何 select 实际方程式,但后来我把它作为一个因素——我该如何操作它?我可以吗?
您可以同时使用eval
和parse
将字符转换为表达式,然后对其求值。我应该指出,这不是一个好的做法。但是,这里有一个您可以尝试的示例:
#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