在R语言的绘图函数中,如果文本参数是合法的R语言表达式,那么这个表达式就被用Tex类似的规则进行文本格式化。
y <- function(x) log(x) + sqrt(x) + x^(1/3) plot(y, 1, 1000, main = expression(y == log(x) + sqrt(x) + sqrt(x, 3)), lwd = 3, col = "blue")
一、R语言的“表达式”
在R语言中,“表达式”的概念有狭义和广义两种意义。狭义的表达式指表达式(expression)类对象,由expression函数产生;而广义的的表达式既包含expression类,也包含R“语言”类(language)。expression和language是R语言中两种特殊数据类:getClass("expression")
## Class "expression" [package "methods"] ## ## No Slots, prototype of class "expression" ## ## Extends: "vector"
getClass("language")
## Virtual Class "language" [package "methods"]
##
## No Slots, prototype of class "name"
##
## Known Subclasses:
## Class "name", directly
## Class "call", directly
## Class "{", directly
## Class "if", directly
## Class "<-", directly
## Class "for", directly
## Class "while", directly
## Class "repeat", directly
## Class "(", directly
## Class ".name", by class "name", distance 2, with explicit coerce
可以看到expression类由向量派生得到,而language类是虚拟类,它包括我们熟悉的程序控制关键词/符号和name、call 子类。
二、产生“表达式”的函数
虽然我们在R终端键入的任何有效语句都是表达式,但这些表达式在输入后即被求值(evaluate)了,获得未经求值的纯粹“表达式”就要使用函数。下面我们从函数参数和返回值两方面了解expression、quote、bquote和substitute这几个常用函数。1、expression 函数
expression函数可以有一个或多个参数,它把全部参数当成一个列表,每个参数都被转成一个表达式向量,所以它的返回值是表达式列表,每个元素都是表达式类型对象,返回值的长度等于参数的个数:(ex <- expression(x = 1, 1 + sqrt(a)))
## expression(x = 1, 1 + sqrt(a))
length(ex)
## [1] 2
ex[1]
## expression(x = 1)
mode(ex[1])
## [1] "expression"
typeof(ex[1])
## [1] "expression"
ex[2]
## expression(1 + sqrt(a))
mode(ex[2])
## [1] "expression"
typeof(ex[2])
## [1] "expression"因为expression函数把参数当成列表处理,所以等号‘=’两边的表达式要符合R语言列表元素的书写规则,否则出错,比如:
expression(x+1=1)
2、quote函数
quote函数只能有一个参数。quote函数的返回值一般情况下是call类型,表达式参数是单个变量的话返回值就是name类型,如果是常量那么返回值的存储模式就和相应常量的模式相同:(cl <- quote(1 + sqrt(a) + b^c))
## 1 + sqrt(a) + b^c

本文深入探讨了R语言中的表达式,包括使用expression、quote、bquote、substitute和parse等函数创建和操作表达式,并详细阐述了表达式规则及在paste函数和R绘图中的应用。
最低0.47元/天 解锁文章
1041

被折叠的 条评论
为什么被折叠?



