I wish to evaluate a vector of strings containing arithmetic expressions -- "1+2", "5*6", etc.
I know that I can parse a single string into an expression and then evaluate it as in eval(parse(text="1+2"))
.
However, I would prefer to evaluate the vector without using a for loop.
foo <- c("1+2","3+4","5*6","7/8") # I want to evaluate this and return c(3,7,30,0.875)
eval(parse(text=foo[1])) # correctly returns 3, so how do I vectorize the evaluation?
eval(sapply(foo, function(x) parse(text=x))) # wrong! evaluates only last element
Just apply the whole function.
sapply(foo, function(x) eval(parse(text=x)))
Just to show that you can also do this with a for loop:
result <- numeric(length(foo))
foo <- parse(text=foo)
for(i in seq_along(foo))
result[i] <- eval(foo[[i]])
I'm not a fan of using the *apply
functions for their own sake, but in this case, sapply
really does lead to simpler, clearer code.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With