R语言学习(瑞士军刀)

简介: R语言学习(瑞士军刀)

(windows安装安装路径不要出现中文,不然RStudio找不到R软件)

1、R中的数据结构

1.1向量,标量

1.2矩阵

1.3数组

1.4列表

1.5数据框

1.6因子

1.7时间序列

2、R语言基础

2.1运算符

  R 语言赋值使用的是左箭头 <- 符号,不过一些新版本也支持等号=,也可以用->符号(最新版本)。

2.2变量的定义

  R 语言的有效的变量名称由字母,数字以及点号 . 或下划线 _ 组成。

变量名称以字母或点开头。

  注意:首字母为“.”点,或者英文字母,“.”号后面不能直接跟数字

demo

> var.1 = c(0,1,2,3)
> print(var.1)
[1] 0 1 2 3
> var.2 = c("Hello","R")
> print(var.2)
[1] "Hello" "R"   
> var.3 <= c("Hello","Java")
错误: 找不到对象'var.3'
#符号错误 <=   应该是 <-
> var.3 <- c("Hello","Java")
> print(var.3)
[1] "Hello" "Java"
> c(true,1)->var.4
错误: 找不到对象'true'
#布尔值大小写敏感
> c(TRUE,1) -> var.4
> print(var.4)
[1] 1 1
>

列出已定义的变量ls()函数

> var.1 = c(0,1,2,3)
> var.2 = c("Hello","R")
> var.3 <- c("Hello","Java")
> c(TRUE,1) -> var.4
> print(ls())
[1] "var.1" "var.2" "var.3" "var.4"
>

删除变量可以使用rm()函数

> print(ls())
[1] "var.1" "var.2" "var.3" "var.4"
> rm(var.1)
> print(ls())
[1] "var.2" "var.3" "var.4"
>

linux中进入和退出R软件

[root@VM-0-3-centos ~]# R
R version 3.6.0 (2019-04-26) -- "Planting of a Tree"
Copyright (C) 2019 The R Foundation for Statistical Computing
Platform: x86_64-redhat-linux-gnu (64-bit)
R是自由软件,不带任何担保。
在某些条件下你可以将其自由散布。
用'license()'或'licence()'来看散布的详细条件。
R是个合作计划,有许多人为之做出了贡献.
用'contributors()'来看合作者的详细情况
用'citation()'会告诉你如何在出版物中正确地引用R或R程序包。
用'demo()'来看一些示范程序,用'help()'来阅读在线帮助文件,或
用'help.start()'通过HTML浏览器来看帮助文件。
用'q()'退出R.
> q()
Save workspace image? [y/n/c]: n

运行R脚本,在命令窗口使用Rscript来执行该脚本

#linux 创建编辑脚本文件 并运行脚本文件
[root@VM-0-3-centos zxgtest]# touch test.R
[root@VM-0-3-centos zxgtest]# vim test.R
[root@VM-0-3-centos zxgtest]# Rscript test.R
[1] 1 2 3 4 5

2.3、常见的函数

输入输出print()函数

> print("Hello R!")
[1] "Hello R!"
>

拼接cat()函数

> cat("张三","今年",18,"岁",'\n')
张三 今年 18 岁
>

cat()函数输出到文件中,append=TRUE输出到文件中不覆盖,追加到后面

> cat("输出到文件中",file="/zxgtest/test.txt")
> cat("追加数据不覆盖之前文件数据",file="/zxgtest/test.txt",append=TRUE)

sink() 函数可以把控制台输出的文字直接输出到文件中去:

> sink("/zxgtest/sinkfile.txt")
#这样会将控制台输出的数据全部存储到指定的文件中,控制台不输出数据,显然这不是我们需要的效果
#split=TRUE 可以实现既将控制台输出的文件保存到文件中,又在控制台显示
> sink("/zxgtest/sinkfile.txt",split=TRUE)
#如果想取消输出到文件,可以调用无参数的 sink :
>sink()

readLines() 从文件中读入数据

# 当前工作目录
print(getwd())
# 设置当前工作目录
setwd("/zxgtwst/test2")
# 查看当前工作目录
print(getwd())

3、R语言两种注释方式

3.1、单行注释 #

# 变量赋值
a <- 9

3.2、多行注释"

if(TRUE) {
    "
    这是一个多行注释的实例
    注释内容放在单引号或双引号之间
    "
}

4、基础运算

优先级 符号 含义
1 () 括号
2 ^ 乘方运算
3 %% 整除求余
  %/% 整除
4 * 乘法
  / 除法
5 + 加法
  - 减法
> 1 + 2*3
[1] 7
> (1+2)*3
[1] 9
> 3 / 4
[1] 0.75
> 3.4-1.2
[1] 2.2
> 1 -4 * 0.5 ^ 3
[1] 0.5
> 8 / 3 %% 2
[1] 8
> 8 / 4 %% 2
[1] Inf
> 3 %% 2^2
[1] 3
> 10 / 3 %/% 2
[1] 10

关系运算符(>  <  ==  !=  >=  <=)

> v <- c(2,4,6,9)
> t <- c(1,4,7,9)
> print(v>t)
[1]  TRUE FALSE FALSE FALSE
> print(v < t)
[1] FALSE FALSE  TRUE FALSE
> print(v == t)
[1] FALSE  TRUE FALSE  TRUE
> print(v!=t)
[1]  TRUE FALSE  TRUE FALSE
> print(v>=t)
[1]  TRUE  TRUE FALSE  TRUE
> print(v<=t)
[1] FALSE  TRUE  TRUE  TRUE
>

逻辑运算

运算符 描述
& 元素逻辑与运算符,将第一个向量的每个元素与第二个向量的相对应元素进行组合,如果两个元素都为TRUE则记过为TRUE,否则为FALSE
| 元素逻辑或运算符,将第一个向量的每个元素与第二个向量的相对应元素进行组合,如果两个元素中有一个为TRUE,则结果为TRUE,如果都为FALSE,则返回FALSE
逻辑非运算符,返回向量每个元素相反的逻辑值,如果元素为TRUE则返回FALSE,如果元素为FALSE则返回TRUE
&& 逻辑与运算符,只对两个向量对一个元素进行判断,如果两个元素都为TRUE,结果为TRUE,否则为FALSE
|| 逻辑或运算符,只对两个向量,对第一个元素进行判断,如果两个元素中一个为TRUE,则结果为TRUE,如果都为FALSE则返回FALSE


> v = c(3,1,TRUE,2+3i)
> t = c(4,1,FALSE,2+3i)
> print(v&t)
[1]  TRUE  TRUE FALSE  TRUE
> print(v|t)
[1] TRUE TRUE TRUE TRUE
> print(!t)
[1] FALSE FALSE  TRUE FALSE
> p = c(3,0,TRUE,2+2i)
> k = c(1,3,TRUE,2+3i)
> print(p&&k)
[1] TRUE
> print(p||k)
[1] TRUE
#&&和||只对第一个元素进行比较

赋值运算符

运算符 描述
<-、=、<<- 向左赋值
->、->> 向右赋值

  其他运算符

运算符 描述
冒号运算符,用于创建一系列数字的向量
%in% 用于判断元素是否再向量里,返回布尔值,有的话返回TRUE,没有的话返回FALSE
%*% 用于矩阵与它转置的矩阵相乘
> v <- 1:10  #1到10的向量
> print(v)
 [1]  1  2  3  4  5  6  7  8  9 10
> s = c(1,2,3)
> print(s)
[1] 1 2 3
> v1 = 3
> v2 = 20
> print(v1 %in% v) #判断数字是否再向量v中
[1] TRUE
> print(v2 %in% v)
[1] FALSE
> M = matrix(c(2,6,5,1,10,4),nrow = 2,ncol = 3,byrow = TRUE)#矩阵与它置换的矩阵相乘
> t = M %*% t(M)
> print(t)
     [,1] [,2]
[1,]   65   82
[2,]   82  117
>

常用数学函数

函数 说明
sqrt(n)

n的平方根

exp(n) 自然常数e的n次方
log(m,n) m的对数函数,返回n的几次方等于m
log10(m) 相当于log(m,10)
> sqrt(4)
[1] 2
> sqrt(16)
[1] 4
> exp(1)
[1] 2.718282
> exp(2)
[1] 7.389056
> log(2,4)
[1] 0.5
> log10(10000)
[1] 4
> log(10,100)
[1] 0.5
>

取整函数

名称 参数模型 含义
round (n) 对n四舍五入取整
round (n,m) 对n保留m位小数四舍五入
ceiling (n) 对n向上取整
floor (n) 对n向下取整
> round(1.5)   #round函数谨慎使用,有时5也会舍去
[1] 2
> round(2.5)
[1] 2
> round(3.5)
[1] 4
> round(4.5)
[1] 4

数学运算   三角函数、反三角函数

> sin(pi/6)
[1] 0.5
> cos(pi/4)
[1] 0.7071068
> tan(pi/3)
[1] 1.732051
> asin(0.5)
[1] 0.5235988
> acos(0.7071068)
[1] 0.7853981
> atan(1.732051)
[1] 1.047198
#下面几个都是正态分布的函数,名字以norm结尾,代表“正态分布”
#前缀   d   概率密度函数
#     p   概率密度积分函数(从无穷小到x的积分)
#     q   分位数函数
#     r   随机数函数(常用于概率仿真)
> dnorm(0)
[1] 0.3989423
> pnorm(0)
[1] 0.5
> qnorm(0.95)
[1] 1.644854
> rnorm(3,5,2) #产生3个平均值为5,标准差为2的正态随机数
[1] 1.351745 5.329550 2.958539

R 语言除了含有正态分布函数以外还有泊松分布 (pois, Poisson) 等常见分布函数  --------“概率论与数理统计”

注意:个位数字为4的话round函数

5、数据类型(数字、逻辑、文本)

  数字常量:一般型、科学计数法

  逻辑类型:常量值只有 TRUE和FALSE   区分大小写。

  对象类型:(向量、列表、矩阵、数组、因子、数据框)

下面详细介绍详细介绍对象类型

  5.1、向量(Vector)

 

  最常见的是二维向量,在平面坐标系中必然会用到。(可以看作java中的数组)。

  c()是创造向量的函数。

  向量中的每个元素可以通过下标单独取出。(下标代表的第几个,起始值为1)(java等其他语言中的下标基本上从0开始)

  注意:二维向量和其他维度的向量运算失去数学意义,会出现警告。

> a=c(1,2,3,6,11,25,64,126)
> a[4]
[1] 6
#通过下标获取单独的值
> a[1:4]
[1] 1 2 3 6
#获取1到4的值
> a[c(1,3,6)]
[1]  1  3 25
#获取1,3,6位置的值
> a[c(-1,-3)]
[1]   2   6  11  25 shuchu  64 126
>
#去掉1,3位置的值,并输出向量

向量支持标量运算

> c(1.1,1.2,1.3) - 0.5
[1] 0.6 0.7 0.8
> a = c(1,2,4)
> a ^ 2
[1]  1  4 16

常用的数学运算函数也适用向量运算 sqrt、exp、sort、rev、order

> a = c(1,3,5,2,4,6)
> sort(a)
[1] 1 2 3 4 5 6
> rev(a)
[1] 6 4 2 5 3 1
> order(a)
[1] 1 4 2 5 3 6
> a[order(a)]
[1] 1 2 3 4 5 6
#order(a) 函数为排序后a向量的下标

 R中有完善的统计函数

 sum、mean(求平均值)、var(方差)、sd(标准差)、min(最小值)、max(最大值)、range(取值范围)(二维向量最大值和最小值)

> sum(1:10)
[1] 55
> sd(1:10)
[1] 3.02765
> range(1:10)
[1]  1 10

向量生成,生成等差数列,可以用seq函数

> seq(1,9,2)
[1] 1 3 5 7 9
> seq(1,8,2)
[1] 1 3 5 7#seq(a,b,c)  从a到b,步长为c> seq(1,2,length.out=3)
[1] 1.0 1.5 2.0
# 从m到n数列的长度为3
> rep(0, 5)
[1] 0 0 0 0 0
#重复数字0 5次

     向量中常会用到NA和NULL,介绍与区别

  NA代表的缺失,NULL代表的不存在

  NA缺失就像占位符,代表这里没有一个值,但位置存在

  NULL代表的就是数据不存在

> length(c(NA, NA, NULL))
[1] 2
> c(NA, NA, NULL, NA)
[1] NA NA NA
#NULL在R向量中没有任何意义

which比较罕见的向量逻辑型处理函数

> c(1,2,3) > 2
[1] FALSE FALSE  TRUE
> a = c(1,2,3)>2
> b = c(1,2,3)
> print(a)
[1] FALSE FALSE  TRUE
> print(b)
[1] 1 2 3
> which(a)
[1] 3
> b = c(1,2,3,4,5,6)
> which(a)
[1] 3
> a = b >2
> which(a)
[1] 3 4 5 6
> vector = c(10,40,78,64,53,62,69,70)
> print(vector[which(vector >= 60 & vector < 70)])
[1] 64 62 69
>
#从一个线性表中筛选大于等于 60 且小于 70 的数据  
类似的函数还有any()  all() 等
> all(c(TRUE,TRUE,TRUE))
[1] TRUE
> all(c(TRUE,FALSE,TRUE))
[1] FALSE
> any(c(TRUE,FALSE,FALSE))
[1] TRUE
> any(c(FALSE,FALSE,FALSE))
[1] FALSE

5.2、字符串(常用的对字符串操作的函数)

> toupper("Hello R")  #转换为大写
[1] "HELLO R"
> tolower("Hello R")  #转换为小写
[1] "hello r"
> nchar("汉字",type="bytes")   #统计字节长度
[1] 6
> nchar("中文",type="byte")  
[1] 6
> nchar("汉字",type="char")  #统计字符数
[1] 2
> substr("unbelievable",1,5)  #截取字符串,从1到5
[1] "unbel"
> substring("unbelievable",5)  #截取字符串,从5到结束
[1] "lievable"
> as.numeric("24")  #将字符串转化为数字
[1] 24
> as.character(12.34)  #将数字转化为字符串
[1] "12.34"
> strsplit("hello_java_learn_R","_")  #分隔符拆分字符串
[[1]]
[1] "hello" "java"  "learn" "R"   
> gsub("/","-","2021/08/21")  #替换字符串
[1] "2021-08-21"
>

 R支持perl语言格式的正则表达式

 5.2、矩阵

> vector = c(1,2,3,4,5,6)
> matrix(vector,2,3)
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6<br>#初始化内容是由一个向量来传递的,其次要输入矩阵有多少行多少列
> vector = c(1,2,3,4,5)
> matrix(vector,2,3)
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    1
Warning message:
In matrix(vector, 2, 3) : 数据长度[5]不是矩阵行数[2]的整倍<br>#当初始化向量数量不足时会给出警告
> vector = c(1,2,3,4,5,6)
> matrix(vector,2,3,byrow=TRUE)
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6<br>#按行来初始化矩阵
> matrix(vector,2,3,byrow=FALSE)
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6<br>#按列初始化矩阵
> m1 = matrix(vector,2,3,byrow=FALSE)
> m1[1,1]
[1] 1
> m1[1,2]
[1] 3<br>直接访问矩阵的具体元素
> colnames(m1) = c("x","y","z")
> rownames(m1) = c("a","b")
> m1
  x y z
a 1 3 5
b 2 4 6
> #设置行列的名称,这个过程通过字符串向量批量完成#通过设定的名称访问具体的元素<br>

 

> m1["b",]
  x y z
  2 4 6
  > m1["b","a"]
  Error in m1["b", "a"] : 下标出界
  > m1["a","x"]
  [1] 1
  > m1["b","y"]
  [1] 4

矩阵的运算

> m1 = matrix(c(1,2,3,4),2,2)
> m2 = matrix(c(5,6,7,8),2,2)
> m1%*%m2
     [,1] [,2]
[1,]   23   31
[2,]   34   46<br>#矩阵的乘法运算
> A = matrix(c(1,2,3,4),2,2)
> solve(A)
     [,1] [,2]
[1,]   -2  1.5
[2,]    1 -0.5<br>#逆矩阵
> A
     [,1] [,2]
[1,]    1    3
[2,]    2    4
> apply(A,1,sum)
[1] 4 6<br>8
> apply(A,2,sum)
[1] 3 7
目录
相关文章
|
8月前
|
机器学习/深度学习 缓存 算法
【视频】Boosting集成学习原理与R语言提升回归树BRT预测短鳍鳗分布生态学实例-2
【视频】Boosting集成学习原理与R语言提升回归树BRT预测短鳍鳗分布生态学实例
|
8月前
|
机器学习/深度学习 数据可视化 算法
从零到精通:学习这些R语言必学包成为数据分析高手!
从零到精通:学习这些R语言必学包成为数据分析高手!
201 0
|
机器学习/深度学习 算法 数据挖掘
R语言自动化学习:乳腺癌诊断颠覆式进化的最新潮流!
本文将探讨自动化学习在乳腺癌诊断中的应用潜力。通过分析大规模的乳腺癌数据集,自动化学习可以提供准确、一致和可靠的诊断结果,为早期筛查、风险评估和治疗方案建议提供支持。然而,仍需解决数据隐私保护和模型解释性等挑战,以推动自动化学习技术在乳腺癌领域的实际应用。
195 0
|
运维 算法 数据可视化
从零开始学习R语言编程:完全指南
R语言是一种流行的数据分析语言,广泛应用于学术界、商业界和社会科学研究等领域。与其它数据分析软件相比,R语言的优点包括免费开源、高效可靠、具有强大的数据分析和可视化能力等。R语言的编程基础包括了各种控制结构和函数,可以方便地实现算法和数据操作。本篇文章将介绍R语言的基本编程结构,涵盖if-else语句、for循环、while循环和函数等,帮助读者快速上手学习R语言编程。
497 0
|
机器学习/深度学习
学习 R语言有哪些较好的论坛和网站?
学习 R语言有哪些较好的论坛和网站?
1234 0
|
数据可视化 数据挖掘 Python
R语言利用转录组基因表达矩阵做基因共表达分析的学习资料推荐
R语言利用转录组基因表达矩阵做基因共表达分析的学习资料推荐
|
数据可视化 大数据 开发者
R语言中值得学习的7个可视化,附代码段&案例数据集
随着数据量的不断增加,不使用可视化来描述事例是不可能的。 数据可视化是一种将数字转化为有用知识的艺术。
12845 0
|
机器学习/深度学习 数据可视化 数据挖掘
|
Linux Web App开发
学习:Linux & Mac 安装R程序和R语言包
Linux & Mac 安装R程序和R语言包
6917 0