文章目录
- 安装
- 运算符
- 判断
- 函数
- 递归
安装
根据自己的操作系统,下载R语言环境后,安装,并将安装路径加入到环境变量,即可从命令行进入R环境
>r
R version 4.2.2 (2022-10-31 ucrt) -- "Innocent and Trusting"
Copyright (C) 2022 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
> q()
Save workspace image? [y/n/c]: n
>
进入之后,通过q()
可以推出R语言环境,在退出之前,会提示是否保存工作镜像,y
是保存,n
是不保存,c
是不退出。
如果并不习惯在命令行中操作,可以下载RStudio。
RStudio是转为R语言打造的集成开发环境,下载地址:RStudio,选择免费的就行,安装过程中,会自动嗅探已经安装的R语言环境,注意选择。
安装完成后,打开界面如下,整体布局为四个格子,左下角的Console
选项卡为命令行,可以直接输入R语言命令;左上角为文件编辑区,既可以编辑R语言脚本,也可以展示当前工作区中的变量详情。其他的选项卡将在后面陆续介绍。
运算符
R语言中,用#
做单行注释,双引号为多行注释。
尽管支持用=
赋值,但在R语言中,更推荐左赋值<-
和右赋值->
作为赋值符,示例如下
a <- 5
6 -> b
a + b -> c
print(c)
# [1] 11
当输入这些命令后,RStudio右上角的Environment
选项卡中,出现了a,b,c
三个变量,其值分别位5, 6, 11。如果点进History
选项卡,会看到刚刚在命令行中输入的所有命令。
在R语言中,常见的运算符和数学函数如下
类别 | |
---|---|
算术 | 加减乘除+, -, *, / ;整除%/% ;求余%% ;乘方^ |
比较 | >, <, ==, !=, >=, <= |
逻辑 | 与或非 &, |, ! |
取整函数 | 四舍五入round ;向上取整ceiling ;向下取整floor |
三角函数 | 三角sin, cos, tan ;反三角asin, acos, atan |
指数对数 | 平方根sqrt ;e指数exp ;对数log ;10底对数log10 |
下面实际体验一下
> round(c/b)
[1] 2
# round的第二个参数,表示保留的小数位数
> round(c/b,3)
[1] 1.833
> c %/% a
[1] 2
> c ^ a
[1] 161051
> c < a
[1] FALSE
> c > a
[1] TRUE
> FALSE | TRUE
[1] TRUE
其中,FALSE
和TRUE
为布尔型返回值,分别表示假和真。
判断
布尔型的一个重要作用,就是作为判断语句的条件。在R语言中,提供了宇宙通用的if...else if...else
语句,示例如下
> if(a>b){
+ print(a)
+ }else if(a==b){
+ print("a==b")
+ }else{
+ print(b)
+ }
[1] 6
在R语言中,语句块用{}
括起来,当命令行检测到尚未封闭的{
后,会自动将>
替换为+
,表示语句尚未写完。上面的if...else
所实现的功能非常简单,如果a>b
,就打印a
;如果a和b相等,就打印字符串a==b
;否则打印b
。
由于a为5,b为6,所以打印了6。
函数
如果每次比较都输入一遍if...else
,将会十分繁琐,使用函数,可以将常用的代码封装起来,以便于复用。
在R语言中,通过关键字function
来创建函数,示例如下
> funTest<-function(a,b){
+ if(a>b) {print("a>b")}
+ else if(a==b){print("a==b")}
+ else{print("a<b")}
+ }
> funTest(3,4)
[1] "a<b"
> funTest(5,4)
[1] "a>b"
> funTest(4,4)
[1] "a==b"
这个函数实现了比较a,b
大小,并输出比较结果的功能。但这个函数和数学上的函数并不相似,主要原因是没有返回值。所谓返回值,可以理解为y=f(x)
中的y
,在r
语言中,通过return
来实现这个功能,示例如下,
> funTest2<-function(){return(2)}
> funTest2()
[1] 2
递归
所谓递归,就是调用自身,例如下面的阶乘函数
> fac<-function(n){
+ if(n>1){return(n*fac(n-1))}
+ else{return(1)}
+ }
> fac(5)
[1] 120
当n>1
时,返回n*fac(n-1)
,fac(5)
的调用链条为
fac(5)->5*fac(4)->5*4*fac(3)->5*4*3*fac(2)->5*4*3*2*fac(1)->120