321

eval()R がその関数を使用して、文字列などによって提供される計算を実行できるかどうか知りたいです。

これはよくあるケースです:

eval("5+5")

ただし、10 の代わりに次のようになります。

[1] "5+5"

解決策はありますか?

4

7 に答える 7

467

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も参照してください。

于 2009-11-16T17:55:29.023 に答える
109

parse()関数を使用して、文字を式に変換できます。parse はデフォルトでファイルを想定しているため、入力がテキストであることを指定する必要があります。

eval(parse(text="5+5"))
于 2009-11-16T17:47:13.890 に答える
19

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"
于 2015-10-12T03:46:06.783 に答える
19

最近では、パッケージlazy_evalから関数を使用することもできます。lazyeval

> lazyeval::lazy_eval("5+5")
[1] 10
于 2018-02-04T00:40:23.770 に答える