R语言进阶之五:表达式、数学公式与特殊符号

本文深入探讨了R语言中的表达式,包括使用expression、quote、bquote、substitute和parse等函数创建和操作表达式,并详细阐述了表达式规则及在paste函数和R绘图中的应用。
在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语言进阶之五:表达式、数学公式与特殊符号 - xxx - xxx的博客

一、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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值