Evaluate expression given as a string

前端 未结 7 1905
小蘑菇
小蘑菇 2020-11-21 23:41

I\'m curious to know if R can use its eval() function to perform calculations provided by e.g. a string.

This is a common case:

eval(\"5         


        
7条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-11-22 00:01

    Sorry but I don't understand why too many people even think a string was something that could be evaluated. You must change your mindset, really. Forget all connections between strings on one side and expressions, calls, evaluation on the other side.

    The (possibly) only connection is via parse(text = ....) and all good R programmers should know that this is rarely an efficient or safe means to construct expressions (or calls). Rather learn more about substitute(), quote(), and possibly the power of using do.call(substitute, ......).

    fortunes::fortune("answer is parse")
    # If the answer is parse() you should usually rethink the question.
    #    -- Thomas Lumley
    #       R-help (February 2005)
    

    Dec.2017: Ok, here is an example (in comments, there's no nice formatting):

    q5 <- quote(5+5)
    str(q5)
    # language 5 + 5
    
    e5 <- expression(5+5)
    str(e5)
    # expression(5 + 5)
    

    and if you get more experienced you'll learn that q5 is a "call" whereas e5 is an "expression", and even that e5[[1]] is identical to q5:

    identical(q5, e5[[1]])
    # [1] TRUE
    

提交回复
热议问题