2016-05-23 22 views
0

文字列を実際の式に変換しようとしています。例えば:私は式のyのベースの値を取得したいと思い文字列を実際の式に変換する方法R

x1=3 
x2=3 
x3=4 
x4=7 
df_new = data.frame(x1,x2,x3,x4) 

:私の現在の文字列は、私は新しいデータセットを持って、今

> a<-"y = 31.563 + 5.923*x1 + 5.061*x2 - 0.662*x3 - 0.381*x4" 
> class(a) 
[1] "character" 

です。だから私はその文字列を実際の方程式に変換する必要があります。誰もそれをする方法を知っていますか?

ありがとうございました!

+0

try 'eval()'関数 – Bulat

答えて

4

は、これはおそらくないこれを行うための最善の方法ですが、eval(parse(...))は動作します:

a <- "y = 31.563 + 5.923*x1 + 5.061*x2 - 0.662*x3 - 0.381*x4" 
df_new <- data.frame(x1=3,x2=3,x3=4,x4=7) 
eval(parse(text=gsub("y =","",a)),df_new) 

私は価値が私はy=を処分したeval()から戻って取得する方法をかなり確実ではなかったです部分...

+0

ありがとう!これは私が必要とするものです。 – cutebunny

+1

@ ZheyuanLiもしこれが受け入れられればあなたを取り去りますか? 'expression'を使ってやや異なるアプローチをとるので、両方を持つことは非常に便利です。 – Gregor

+1

将来の読者に役立つかもしれないので。 –

2

私のコメントでは、関数を使用できると述べました。さて、私はその解決策には触れませんが、expressionを使って別の解決策を提供します。

## define expression 
expr <- expression(31.563 + 5.923 * x1 + 5.061 * x2 - 0.662 * x3 - 0.381 * x4) 
## sample data 
df <- data.frame(x1 = runif(5), x2 = runif(5), x3 = runif(5), x4 = runif(5)) 
## evaluate your expression in data frame environment 
y <- eval(expr, df) 

@Benは、別の一般的なトリックである組み合わせeval()parse()を、使用していました。実際に文字列stringから開始したい場合、またはそのような文字列が与えられていて選択肢がない場合は、parse(text = string)を最初に式にする必要があります。私の答えは、実際にあなた自身の方程式を入力することができると仮定します。この場合、expressionを使うのは非常に良いです。

関連する問題