R学习笔记03 2021-01-29

本文档概述了R语言学习笔记03的内容,涵盖了快捷键使用、运算符、换行技巧、控制结构(ifelse、switch)、循环(for、while、repeat)、函数定义、R包管理以及各类核心函数。适合R初学者快速掌握基础操作。
摘要由CSDN通过智能技术生成


title: “R的学习笔记03”
author: “ks_c”
date: “2021/1/29”
output: html_document


    昨日在bookdown网站上看到一本书R数据分析指南与速查手册,看起来挺不错,奈何网络奇差,每次打开bookdown网站时都花费不少时间,又无法直接下载,故在阅读过程中做记录于此。后时若用到,则不必费力再登陆彼网站。
郭晓,R 数据分析指南与速查手册,bookdown.org

以下为第一章的内容。

1. 快捷键

  1. 脚本编辑窗口:
  • 新建脚本:Ctrl+Shift+N
  • 代码提示与补全:Tab
  • 注释或取消注释:Ctrl+Shift+C
  • 运行所选代码:Ctrl+Enter
  • 运行全部代码:Ctrl+Shift+Enter
  • 全选:Ctrl+A
  • 选择:Shift+箭头
  • 删除行:Ctrl+D
  • 撤销:Ctrl+Z
  • 重做:Ctrl+Shift+Z
  • 赋值符:Alt±
  • 代码折叠:Alt+L
  • 代码展开:Shift+Alt+L
  • 保存本脚本:Ctrl+S
  • 保存全部脚本:Ctrl+Alt+S
  • 增加缩进:选中代码后,Tab(可包括多行)
  • 减小缩进:选中代码后,Shift+Tab
  • 智能缩进:选中代码后,Ctrl+I
  • 智能缩进加智能空格:Ctrl+Shift+A(更高级的代码格式规范化工具,可参考formatR包)
  • 选择与替换:Ctrl+F
  • 提取函数:Ctrl+Alt+X(RStudio 可以分析某一代码段,并自动将其转换成一个可- 重复使用的函数。任何在选择的代码内的“自由的”变量,即那些被引用但没有被创建的变量,将被转化为函数的参数)
  1. 命令窗口中:
  • 历史中的上一条命令:向上箭头
  • 历史中的下一条命令:向下箭头
  • 中断运行的代码:Esc
  • 清除命令窗口中的内容:Ctrl+L

2.常见运算符

运算符含义
[ ] [[ ]]索引(关于两者之间差异请见这篇笔记 )
:: :::使用名称访问变量(一般使用: : )
$ @元素提取、位置提取(更常用$)
^乘方
- +负、正
:创建数列(x<-c(1:10)#创建1到10的一个数列)
%任意%特殊运算符
a%in%b #判断a是否在b中,返回T or F
%>%管道符号,见这里
* /乘、除
+ -加、减
==、!=、<、>、<=、>=比较运算符
!逻辑非
&、&&逻辑与
I (竖线,enter上遍的键那个)逻辑或
~非,与!=等价
-> 、->>向右赋值
=赋值(右边变量的值给左边变量)
<- 、<<-赋值(同上)
?帮助

3. 关于换行

分号; 一行执行多条命令(谁会用呢)
我今天用了三次……

 a <- 1;b <- 2
 a
[1] 1
 b
[1] 2

paste0( )函数:来凝结多行字符串

string1 <- "this is a long string 
+ with a ‘\n’  "
[1] "this is a long string \nwith \n"
#如果赋值时直接在字符串中分行,那么最终会出现一个换行符"\n"

 a <- paste0('this is the first line ',
+             'this is the second line')
 a
[1] "this is the first line this is the second line"
#如果用paste0()函数则不会出现

paste()和paste0()之间的区别在于:

paste(…, collapse ="" , recycle0 =F)

paste(…, sep="", collapse ="" , recycle0 =F)函数中多了一个sep参数,用来设置分隔符。

4. ifelse控制语句

类似Excel中的=if()函数。
在Excel中,=if(条件,值为T则,值为F则),在Rstudio中可以用ifelse()函数实现。

 x <- c(6:-4)
 y <- sqrt(ifelse(x >= 0, x, NA))#如果x大于0,那么就取x的值进行计算,否则就是NA。
x
[1]  6  5  4  3  2  1  0 -1 -2 -3 -4
y
 [1] 2.449490 2.236068 2.000000 1.732051 1.414214 1.000000
 [7] 0.000000       NA       NA       NA       NA

多重套娃

a <- ifelse(value1,  value1_if_true,
            ifelse(value2,  value2_if_true,
                   ifelse(value3,  value3_if_true,
                          value_if_false)))

5. switch()函数

switch(EXPR, x1, x2, x3, …, xn ):数值EXPR为几,就返回x1到xn中的第几个。0<EXPR<=n,否则就会返回NULL[1]

x <- switch(1,'missile', 'cancle', 'dissle')
x
[1] "missile"
x <- switch(4,'missile', 'cancle', 'dissle')
x
NULL

如果后面不是字符串而是变量,那么返回的值为该变量(该变量内所有值),而非返回该向量内的第几个元素(哪怕只有一个向量时)

 y <- c('missile', 'cancle', 'dissle')
 z <- c('pissile','bassle')
 x <- switch(2,y,z)
 x
[1] "pissile" "bassle" 

 y <- c('missile', 'cancle', 'dissle')
 x <- switch(1,y)
 x
[1] "missile" "cancle"  "dissle" 

字符串来说,其用法如下:

switch(condition.string,
case.str1=ret1,
case.str2=ret2,
case.str2=ret2,
…)
而最后返回的值为和condition.string匹配的case.str的ret的值

s <- "color"
switch(s, "color" = "red", "shape" = "square", "length" = 5)
[1] "red"

6. 循环语句:for、while、repeat

6.1 for

for (variable in vector) {
function
}
vector为向量或列表,variable依次变成vector中的值,然后对其进行操作。
function为要进行的操作。

(直接摘抄的)例子:

a <- double(5)  #产生5个0
for (i in 1:length(a)) {
  a[i] <- i^2
}           #length(a)为5,令i依次取1到5,然后a的第i个元素a[i]被赋值为i^2

a
[1]  1  4  9 16 25

b <- list("Appale",1,FALSE)    #b为列表
item <- character()            # item为字符串变量
for (i in b) {                 # i依次取b中元素,
  item <- c(item,mode(i))      #mode()为判断元素类别
}                              #利用mode()判断 i 的类别,新的item变量为旧item变量加上mode(i)
item.mode
[1] "character" "numeric"   "logical"

始终要记住,R是一款newbeer的统计软件而非newbeer的编程软件。
利用向量化的操作比用循环对元素进行操作要更高效,且代码更加简洁。能用向量化的操作时应避免用循环操作。
以上代码用向量化操作可以写为:

b <- list("Appale",1,FALSE)
item.mode <- sapply(b,mode)#

sapply()函数:类似于lapply函数,但输入为列表,返回值为向量

sapply(X, FUN, …, )
X:列表、矩阵、数据框
FUN:自定义的调用函数
sapply(b, sum)# 求列表中各元素的和
sapply(b,mode)# 判断各元素类型

6.2 while

当条件cond满足时,重复执行表达式expr,直到条件cond不满足为止。

while (cond) {
expr
}

例子:

i <- 1
while (i < 6) {
  print(i)
  i = i + 1
}
 [1] 1
 [1] 2
 [1] 3
 [1] 4
 [1] 5

6.3 repeat

repeat{}和rep()函数不同。
rep(x,times,length.out,each) 函数:将x重复times次,或者重复到length.out的长度

 a <- 2:8
 rep(a,times=2)
 [1] 2 3 4 5 6 7 8 2 3 4 5 6 7 8

 rep(a,length.out=2)#重复结果的长度为2
[1] 2 3

rep(a,each=2)#每个值重复两次
 [1] 2 2 3 3 4 4 5 5 6 6 7 7 8 8

rep(a, each=3,length.out=10)
 [1] 2 2 2 3 3 3 4 4 4 5

而repeat{}则是重复执行花括号内的命令

x <- 1
repeat {
  print(x)
  x <- x + 1
  if (x == 6) {
    break
  }
}
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5

7. 定义函数

形式如下:

FuncName <- function (arglist) {
expr
return(value)
}
argilist:参数列表,用, 隔开。
expr:要执行的命令。
return():给出返回结果,如果不写return语句,则将函数最后一个赋值语句作为返回值。如果不想返回任何对象,则可以将return的参数空缺,即写为return()。
当使用参数时,如果没有指定参数名,则按顺序赋值,如果指定了参数名,可以不按顺序赋值。对于已经指定了默认值的参数,可以在使用时不指定参数值。

#a is the girl ur found of ,then R'll tell u compared with another(b), she is prettier
prty <- function(a,b){
  p1 <- paste(toupper(a),'is much prettier')
  p2 <- 'illegal'
  p3 <- 'empty'
  pout <- ifelse(length(a)==1,p1,ifelse(length(a)>1,p2,p3))
  return(pout) 
}
prty('yifei liu', 'mi yang')
## [1] "YIFEI LIU is much prettier"

类似python,不再介绍。

8. R包

常用的R包:可参考 https://support.rstudio.com/hc/en-us/articles/201057987-Quick-list-of-useful-R-packages

按应用领域分类的R包,可参考 https://cran.r-project.org/web/views/

  • 包的安装:用install.packages(“包的名字”)
  • 包的加载:用library(包的名字)
  • 从环境中移除包:detach(“package:包的名字”, unload=TRUE)
  • 卸载包:remove.packages(“包的名字”)

9. 常用函数

9.1. 常用数学函数

函数描述
abs(x)绝对值
sqrt(x)开平方
ceiling(x)向上取整
floor(x)向下取整
trunc(x)0-x的整数部分
round(x,digits=n)舍入至n位小数
signif(x,digits=n)该数字一共n个数(整数+小数)
cos(x) & sin(x) & tan(x)三角函数
acos(x) & asin(x) & atan(x)反三角函数
log(x,base=n)取以n为底,x的对数
log10(x)以10为底,x的对数
exp(x)指数函数:以e为底的指数

9.2. 统计函数

函数描述
mean(x)均值
media(x)中位数
sd(x) / var(x)标准差/方差
mad(x)绝对中位差
quantile(x, probs)分位数
range(x)全域
sum(x)求和
diff(x, lag=n)滞后n位的滞后差分…[1]
min(x)/max(x)极值
scale(x, center=T, scale=T)中心化/标准化处理[2]
cov(x)协方差

[1] : 滞后差分:

x<-c(1,5,23,29)
diff(x)
[ 1 ] 4,8,6
#后一个数字减去前一个数字

[2] : scale(x):标准化;scale(x,scale=F):中心化。

##9.3概率函数

概率函数分为4类:密度函数、分布函数、分位数函数、生成随机数。
根据不同的分布,又分为正态分布、均匀分布等等,二者组合成为具体的函数,在R中,前面4种类型用下面字母打头,之后的函数如下表所示:

d = 密度函数( density,y轴的值)
p = 分布函数( distribution function)
q = 分位数函数( quantile function)
r = 生成随机数(随机偏差Random error)

缩写分布名称
norm正态分布
tt分布
chisq卡方分布
fF分布
logis逻辑分布
singrankwilcoxon符号秩和分布
wilcoxwilcoxon秩和分布
betaBeta分布
binom二项分布
exp指数分布
geom几何分布
pois泊松分布

对数

其余详见下图
分布名称与缩写

概率为0.95的N~(0,1)的分位数为1.64

qnorm(p=0.95,mean=0,sd=1)
[1] 1.644854

概率为0.99的N~(0,1)的分位数为1.64

qnorm(p=0.99, mean=0, sd=1)
[1] 2.326348

分位数为1.64的N~(0,1)的概率为0.95

pnorm(q = 1.64,0,1)
[1] 0.9494974

pnorm()和qnorm()之间的值可以互相转化

9.4. 工作空间函数

在R中,所有反斜杠\代表转义,工作路径用两个反斜杠或者正斜杠。
工作空间管理

ls(all.names=TRUE): 得到包含隐藏变量(以点开头的变量)的列表。

.Last.value:得到上次运行的结果

search(): 查看已经载入的包。

library():查看已经安装的包。

data(dsname,package=“pkgname”):不载入某个包的情况下,使用该包的某个数据

9.5. 帮助函数

获取函数的帮助:?后接函数名,函数可不加括号,显示函数的帮助文档。

获取的帮助:用命令help(package=“包的名字”)。

获取函数源代码:命令窗口中输入函数,不加括号并回车后
  有时候这个函数可能是一个类函数(Generic Function),如plot函数,则先使用methods() 函数来查看这个类函数的列表,找到具体需要的函数如plot.default,使用?plot.default进行查看。

获取特殊符号的帮助,如[[,if,用help(“特殊符号”)

其他帮助命令见下图:
帮助命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值