2017-08-31 60 views
1

有谁知道一种方法可以用一个字符串作为R中的实际方程或公式吗?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 

所以我们可以说我有柚木在我的观测数据桉,我希望能够提取-4.58643+1.90532*log10(X)+1.0646*log10(Z),并与我的观察X(直径)和Z(高度)使用它。

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

+0

实际的'X'和'Z'数值是否在同一个数据框中?还是你在别的地方看他们?如果您在示例中包含数字“X”和“Z”,这将有所帮助。 – Marius

+0

是,X和Z是记录在观测数据(与数据库分开)中的树直径和高度,是数值。我认为这对我来说并不是一个问题,因为我实际上将它们提取出来并将它们用于一个公式中 – Geraldine

+2

测试此:'x =“-4.58643 + 1.90532 * log10(X)+ 1.0646 * log10(Z)”; X = 2; Z = 5; eval(parse(text = x))' –

回答

2

您可以一起使用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 
+1

谢谢!出于兴趣 - 为什么它不被认为是好的做法? – Geraldine

+1

@Geraldine,在这方面有几个问题。这里是一个:[什么特别是eval的危害(解析(...))?](https://stackoverflow.com/q/13649979/7128934) –

相关问题