eval()
R がその関数を使用して、文字列などによって提供される計算を実行できるかどうか知りたいです。
これはよくあるケースです:
eval("5+5")
ただし、10 の代わりに次のようになります。
[1] "5+5"
解決策はありますか?
eval()
関数は式を評価しますが、式では"5+5"
なく文字列です。parse()
withを使用しtext=<string>
て、文字列を式に変更します。
> eval(parse(text="5+5"))
[1] 10
> class("5+5")
[1] "character"
> class(parse(text="5+5"))
[1] "expression"
呼び出しeval()
は多くの動作を呼び出しますが、すぐにはわからないものもあります。
> class(eval(parse(text="5+5")))
[1] "numeric"
> class(eval(parse(text="gray")))
[1] "function"
> class(eval(parse(text="blue")))
Error in eval(expr, envir, enclos) : object 'blue' not found
tryCatchも参照してください。
parse()
関数を使用して、文字を式に変換できます。parse はデフォルトでファイルを想定しているため、入力がテキストであることを指定する必要があります。
eval(parse(text="5+5"))
evals
または、私のパッケージから使用して、pander
出力とすべての警告、エラー、およびその他のメッセージを生の結果とともにキャプチャすることもできます。
> pander::evals("5+5")
[[1]]
$src
[1] "5 + 5"
$result
[1] 10
$output
[1] "[1] 10"
$type
[1] "numeric"
$msg
$msg$messages
NULL
$msg$warnings
NULL
$msg$errors
NULL
$stdout
NULL
attr(,"class")
[1] "evals"
最近では、パッケージlazy_eval
から関数を使用することもできます。lazyeval
> lazyeval::lazy_eval("5+5")
[1] 10