R语言学习笔记:从零开始?数据结构和基础知识

R语言是一种数学编程语言,主要用于统计分析、绘图、数据挖掘。其在生物信息大数据分析处理过程中扮演着重要角色,笔者从今天开始分享R语言学习笔记。

环境安装

  • Windows

官方地址:https://cloud.r-project.org/bin/windows/base/

  • Linux

官方地址:https://cloud.r-project.org/bin/linux/

sudo apt update
sudo apt -y upgrade
sudo apt -y install r-base
  • macOS

官方地址:https://cloud.r-project.org/bin/macosx/


R语言基础

R 语言赋值使用的是左箭头<-符号,输出函数是print(),可以用以下代码输出hello,world!,其中mystring是一个变量。

myString <- "Hello, World!"
print ( myString )

变量

  • 变量名称由字母,数字以及点号 . 或下划线 _ 组成。
  • 赋值可以使用左箭头 <-、等号 = 、右箭头 -> 赋值。
# 使用左箭头 <-赋值
> var.2 <- c("learn","R")  
> print(var.2)
[1] "learn" "R"
   
# 使用右箭头 -> 赋值
> c(TRUE,1) -> var.3
> print(var.3)
[1] 1 1 
  • 查看已定义的变量使用ls()函数
print(ls())
[1] "var.1" "var.2" "var.3"
  • 删除变量用rm()函数
> rm(var.3)
> print(ls())
[1] "var.1" "var.2"
  • 交互式编程,比如在Linux系统下使用R,进入时输入R,退出时输入q()
  • 文件脚本

后缀为.r的文件时r脚本,执行时使用Rscript命令后接脚本文件。

输入与输出

  • print()是输出函数,支持数字、字符等输出。
  • cat()函数能够拼接输出结果,会自动在拼接元素间加一个空格。
> cat(ni,hao,ya!)
ni hao ya!
  • 输出内容到文件:使用cat()函数,不会在控制台产生结果,文件地址使用绝对路径,这个操作是覆盖写入,若需要保留文件原来内容,需要设置参数append=TRUE
cat("NI", file="D:\\r_test.txt")
cat("HAO", file="/Users/r_test.txt", append=TRUE)
输出结果:NIHAO
  • sink()函数可以把控制台内容写入文件中,同时控制台不再显示输出了。

该操作默认覆盖写入,若需追加写入使用参数append=TRUE,若需控制台也同样输出则使用参数aplit=TRUE,若需取消则使用sink()

  • 文字输入:readLines(xxx.txt)命令可以读取文件内容为字符串

所读文件每一行末尾必须有换行符。

  • 工作目录:使用getwd()获取当前工作目录,使用setwd()设置当前工作目录。
# 当前工作目录
print(getwd())

# 设置当前工作目录
setwd("/Users/runoob/runoob-test2")

# 查看当前工作目录
print(getwd())
  • 注释功能:主要用于代码的解析,让读者更易理解,不会影响代码的执行。使用时在需要注释的一行前面加#即可。

R基础运算

赋值

R语言新版本同时支持=<-两种赋值符号,下表是主要的数学运算法则

关系运算符用于比较两个向量,结果返回TRUEFALSE,下表是主要的关系运算法则

逻辑运算符可用于数字、逻辑、复数向量。非零数字均为TRUE,下表是主要的逻辑运算法则

|&! ,上述三个运算针对向量的每个元素,&&||只针对第一个元素。

  • 特殊运算符:

  • 常见数学函数:

sqrt(n) n的平方根

exp(n) 自然常数e的n次方

log(m,n) 对数函数,返回n的几次方为m

log10(m) 相当于log(m,10)

round (n, m)对 n 保留 m 位小数四舍五入

ceiling (n) 对 n 向上取整

floor (n) 对 n 向下取整

数据类型

R 语言中的最基本数据类型主要有三种:

  • 数字:一般形式或科学计数法
  • 逻辑:布尔型(TRUE 、FALSE)
  • 文本:字符串String,包含在单引号或者双引号之中。

对象类型分为以下5种:

  • 向量(vector)
> a = c(3, 4)
> b = c(5, 0)
> a + b
[1] 8 4

向量后面加方括号输入数字标号,可以提取向量的一部分元素,也可以使用嵌套条件,如下。

> a = c(10, 20, 30, 40, 50)
> a[1:4] # 取出第 1 到 4 项,包含第 1 和第 4 项
[1] 10 20 30 40
> a[c(1, 3, 5)] # 取出第 1, 3, 5 项
[1] 10 30 50
> a[c(-1, -5)] # 去掉第 1 和第 5 项
[1] 20 30 40

向量也可以和标量进行计算,常用的数学运算函数也能对向量起作用,同时还可以对向量进行排序等操作,如下。

向量数学运算:
> c(1.1, 1.2, 1.3) - 0.5
[1] 0.6 0.7 0.8
> a = c(1,2)
> a ^ 2
[1] 1 4

向量内元素排序:
> a = c(1, 3, 5, 2, 4, 6)
#sort函数升序排列
> sort(a)  
[1] 1 2 3 4 5 6

#rev函数降序排列
> rev(a)  
[1] 6 4 2 5 3 1

#order函数返回向量从小到大排序后在原始向量中位次
> order(a)   
[1] 1 4 2 5 3 6
> a[order(a)]
[1] 1 2 3 4 5 6

向量的统计学处理函数:

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

向量的批量生成可以使用seq(起始值,终止值,length.out=数值个数)命令,就能产生等差数列。也可以使用rep(数字,重复的个数)命令来产生多个重复数字序列。如下。

> seq(1,9,length.out=3)
[1] 1 5 9
> rep(2,5)
[1] 2 2 2 2 2

向量中常会用到NA和NULL表示异常数值。NA表示缺失,代表没有值但位置存在。NULL表示数据不存在,啥也没有无意义。

向量的逻辑处理which()函数用来筛选需要的数据的下标,all()函数用来检查向量是否全都是TRUE,any()函数用来检查向量中是否含有TRUE。如下。

> a = c(11, 12, 13)
> b = a > 12
> print(b)
[1] FALSE FALSE  TRUE
> which(b)
[1] 3

> vector = c(10, 40, 78, 64, 53, 62, 69, 70)
> print(vector[which(vector >= 60 & vector < 70)])
[1] 64 62 69

> all(c(TRUE, TRUE, TRUE))
[1] TRUE
> all(c(TRUE, TRUE, FALSE))
[1] FALSE
> any(c(TRUE, FALSE, FALSE))
[1] TRUE
> any(c(FALSE, FALSE, FALSE))
[1] FALSE
  • 字符串(string)

文字内容以字符串形式储存,可以用'hahaha'单引号或者"hahaha"双引号都行,接下来介绍字符串的操作函数。

#全部转大写
> toupper("ShengXinFenXiBiJi")
[1] "SHENGXINFENXIBIJI"
#全部转小写
> tolower("ShengXinFenXiBiJi")
[1] "shengxinfenxibiji"
#统计字符数
> nchar("ShengXinFenXiBiJi")
[1] 17
#截取编号从1到8的字符
> substr("ShengXinFenXiBiJi",1,8)
[1] "ShengXin"
#截取编号14之后的字符
> substring("ShengXinFenXiBiJi",14)
[1] "BiJi"
#将字符转换为数字
> as.numeric("123")
[1] 123
#将数字转换成字符
> as.character(1234)
[1] "1234"
#以固定分隔符拆分字符
> strsplit("2022;9;16",";")
[[1]]
[1] "2022" "9"    "16"  
#替换字符中的特定内容
> gsub("/","-","2022-9-16")
[1] "2022-9-16"
> gsub("-","/","2022-9-16")
[1] "2022/9/16"
  • 矩阵(matrix)

矩阵由向量生成,向量的值依次以一列一列的方式填充,如果想按行填充,添加byrow=TURE参数。

> 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

矩阵中每个值都能直接提取。

> m1 = matrix(vector, 2, 3, byrow=TRUE)
> m1[1,1] # 第 1 行 第 1 列
[1] 1
> m1[1,3] # 第 1 行 第 3 列
[1] 3

矩阵的每一行和每一列都能设置名称,用下列方式完成。

> m1 = matrix(vector,2,3,byrow=TRUE)
> colnames(m1) = c("s","f","f")
> rownames(m1) = c("t","o")
> m1
  s f f
t 1 2 3
o 4 5 6

本文由mdnice多平台发布

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生信分析笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值