usare Valuta l'espressione data come stringa




title tag moz (4)

Al giorno d'oggi puoi anche usare la funzione lazyeval dal pacchetto lazyeval .

> lazyeval::lazy_eval("5+5")
[1] 10

Sono curioso di sapere se R può usare la sua eval() per eseguire calcoli forniti ad esempio da una stringa.

Questo è un caso comune:

eval("5+5")

Tuttavia, invece di 10 ottengo:

[1] "5+5"

Qualche soluzione?


È possibile utilizzare la funzione parse() per convertire i caratteri in un'espressione. È necessario specificare che l'input sia di testo, perché l'analisi prevede un file per impostazione predefinita:

eval(parse(text="5+5"))

In alternativa, puoi utilizzare le evals dal mio pacchetto evals per acquisire l'output e tutti gli avvisi, gli errori e altri messaggi insieme ai risultati non evals :

> 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"

La eval() valuta un'espressione, ma "5+5" è una stringa, non un'espressione. Usa parse() con text=<string> per cambiare la stringa in un'espressione:

> eval(parse(text="5+5"))
[1] 10
> class("5+5")
[1] "character"
> class(parse(text="5+5"))
[1] "expression"

Chiamare eval() richiama molti comportamenti, alcuni non sono immediatamente ovvi:

> 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

Vedi anche tryCatch .





r-faq