2017-08-31 75 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) –

相關問題