2017-08-31 1 views
1

Kennt jemand eine Möglichkeit, eine Gleichung zu verwenden, die als eine Zeichenfolge als eine tatsächliche Gleichung oder Formel in R angegeben wird?R: Verwenden Sie die Gleichung als eine Zeichenfolge geschrieben als eine tatsächliche Gleichung

Ich habe eine Datenbank mit allometrischen Gleichungen (die Sie verwenden können, um Biomasse von Bäumen zu berechnen/schätzen), zusammen mit Informationen über Standorte und Arten, für die sie entwickelt wurden. Ich habe noch einen weiteren großen Datensatz mit beobachteten Arten; Also überstreiche ich alle diese Spezies und ihren Ort, um die allometrische Gleichung für jeden zu finden, und die Gleichungen können sehr unterschiedlich sein [dies soll nur zeigen, dass dies keine einmalige Übung ist, so dass ich keinen sehr spezifischen Ansatz verwenden kann]. Ich möchte dann meinen beobachteten Datensatz (mit Dingen wie Durchmesser und Höhe der Bäume) verwenden, um Biomasse zu berechnen - aber ich weiß nicht, wie ich den Ausdruck, der in der allometrischen Gleichungsdatenbank steht, tatsächlich verwende. Siehe unten ein sehr kurzes Beispiel.

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 

Also lassen Sie uns sagen, ich habe Tectona in meiner beobachteten Daten grandis, ich will -4.58643+1.90532*log10(X)+1.0646*log10(Z) extrahieren können, und verwenden Sie es mit meinem beobachtet X (Durchmesser) und Z (Höhe).

Ich brauche eine Art "generische" Lösung, da ich mich mit vielen Arten und vielen verschiedenen Gleichungen befasse. Ich weiß, wie man die tatsächliche Gleichung auswählt, aber dann habe ich sie als Faktor - wie operationalisiere ich sie? Kann ich?

+0

Sind die tatsächlichen 'X' und' Z' numerische Werte im selben Datenrahmen? Oder schaust du sie woanders hin? Es wäre hilfreich, wenn Sie in Ihrem Beispiel die Zahlen "X" und "Z" angeben würden. – Marius

+0

Ja, X und Z sind Baumdurchmesser und -höhe, die in den beobachteten Daten (die von dieser Datenbank getrennt sind) als numerische Werte aufgezeichnet werden. Ich denke nicht, dass es ein Problem für mich ist, diese zu extrahieren und sie in einer Gleichung zu verwenden. – Geraldine

+2

Testen Sie dies: "x =" -4.58643 + 1.90532 * log10 (X) + 1.0646 * log10 (Z) "; X = 2; Z = 5; eval (parse (text = x)) ' –

Antwort

2

Sie können eval und parse zusammen verwenden, um Zeichen in Ausdrücke zu konvertieren und dann auszuwerten. Ich sollte beachten, dass dies nicht als eine gute Praxis angesehen wird. Aber hier ist ein Beispiel, das Sie versuchen können:

#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

Danke! Aus Interesse - warum gilt das nicht als gute Praxis? – Geraldine

+1

@Geraldine, es gibt einige Fragen in SO darüber. Hier ist einer: [Was genau sind die Gefahren von eval (parse (...))?] (Https://stackoverflow.com/q/13649979/7128934) –

Verwandte Themen