title: "Day-1 2"
author: "lyl"
date: "2024-06-27"
output: html_document
代码语言:{r setup, include=FALSE}复制knitr::opts_chunk$set(echo = TRUE,message=F,warning=F)
课前准备
代码语言:{r}复制#两个电脑共享屏幕
# > :R语言的命令提示符
# 新建项目project:file-New project-New Directory-New project-设置名称及位置-Create Project
#新建脚本:File-New File--R Script
#展示所有面板:View--Panes--Show ALL Panes
#字号设置:Tools--Global Options--Appearance--Editor Font size --Apply
#重启R语言:Session--Restart session
#小括号前()的字母/单词一定是函数
#脚本文件保存时,会在文件名后面加上一个.R(起名不要加.)
#脚本、图片、文件的默认保存位置,也是文件读取的默认位置,都在一个工作目录(working directory)下,也就是同一个文件夹下
#为方便管理工作目录,推荐从project进入R语言,不推荐从.R(脚本)进去R,否则需要管理工作目录
#error:检查命令/环境/修改代码
#warring:忽略
#卡住了:中止(点击红色键)或重启session
#出现” “:表示命令不完整,需要补全或ESC键退出
#出现提示信息:没有关键词(error)就是不关键
#进一步选择:一定要回答,不回答就不过去,一般no
分割#数据类型:numeric数值型:1.3 4 7.3 # character字符型:"s" "3" "dvd sd" #(一定需要引号) # logical逻辑值:TRUE=T FALSE=F NA #判断数据类型的函数:class(),将要判断的内容写在括号里
逻辑型数据
代码语言:{r}复制#比较运算的结果是逻辑值,比较运算是返回逻辑值的方法之一,还有别的。
#比较运算符号:>, <, <=, >=, ==, !=
3==4
3!=4
# 逻辑运算:多个逻辑条件连接:与&、或|
3<5&4>5
3<5|4>5
#非!!:表否定,专门给逻辑值用
!(4>5)
#is族函数,判断,返回值为TRUE或FALSE 判断是不是,而不是判断是什么
# is.numeric() 是否数值型数据
# is.logical() 是否逻辑型数据
# is.character() 是否字符型数据
is.numeric("a")
is.character("a")
is.numeric("4")
is.character(TRUE)
is.logical(TRUE)
#as族函数实现数据类型之间的转换
# as.numeric() 将其他数据转换为数值型
# as.logical() 将其他数据转换为否逻辑型
# as.character() 将其他数据转换为字符型
as.numeric("jimmy")
as.character(4)
as.numeric("4")
#多个数据如何组织?
# 数据结构:向量、数据框、矩阵、列表
向量的生成
代码语言:{r}复制#法1:用c()逐一放在一起
c(2,5,6,2,9) #数值型数据
c("a","d","f","s") #字符型数据
#法2:连续的数字用冒号":"
1:5
#法3:有重复的用rep(),有规律的序列用seq(),随机数用rnorm
rep("x",times=3)#"x"重复三次
seq(from=3,to=21,by=3) #从3到21 间隔3取一个数
rnorm(n=3) #从一组正态分布的数字取出三个
#法4:通过组合产生更为复杂的向量
paste0(rep("x",times=3),1:3) #两个向量合成一个向量
常见错误
代码语言:{r}复制#引号、拼写(函数)错误、大小写
#不能使用中文字符
#当出现unexpected时,说明代码写错
#找不到函数则函数有问题,找不到对象说明对象有问题,没有提前对对象赋值或者没有加引号
#脚本打开遇到乱码:解决方案:File--Reopen with Encoding--UTF-8--ok
小知识
代码语言:{r}复制#object:对象/变量
#function:函数
#Taq键 上下键:补齐函数、文件名等等。。
#大于号后,使用上下键,可翻动前面的代码,直接修改代码,节省时间
#格式大于内容
#数据框与等于“表格”:每一列需要为同一种数据类型,他不是文件,
#数据框单独拿出来的一列是向量,视为一个整体
#一个向量只能有一种数据类型
#paste与paste0的区别
##Day1-练习题
代码语言:{r}复制# 2.生成向量,内容为:"student2" "student4" "student6" "student8" "student10" "student12"
# "student14"
# 提示:paste0
paste0(rep("student",times=7),seq(from=2,to=15,by=2)) #我的答案,但是times=7是看题目数出来的,是个笨方法,还易错不智能
a=seq(from=2,to=15,by=2) #先赋值
paste0(rep("student",times=length(a)),a) #使用length函数
##Day2-笔记
代码语言:{r}复制#逻辑运算符号同样适用于向量
#向量的组成单位为元素
#数据类型转换的优先顺序:逻辑可变字符,逻辑可变数值,数值可变字符,也就是说:逻辑和数值都可以变成字符,逻辑也可转变为数值。
c(1,"a")
c(TRUE,"a")
c(TRUE,FALSE,1)
对当个向量进行操作
代码语言:{r}复制#(1)赋值
x<- c(1,3,5,7)#<-规范的赋值符号
x= c(1,3,5,7)#=随意的写法
# 赋值和输出一起实现
(x<- c(1,3,5,7)) #加括号
x<- c(1,3,5,7);x #两句代码使用;分开代码 则可以同时运行
#(2)对单个向量进行操作
x 1
log(x)
# (3)比较运算
x>3 #1,3,5,7逐一跟3比较
x==3 ## ==为比较运算;=为赋值
#(4)初级统计
max(x) #最大值
min(x) #最小值
mean(x) #均值
median(x) #中位数
var(x) #方差
sd(x) #标准差
sum(x) #总和
# 重要的函数
length(x) #长度 数向量里元素的个数
unique(x) #去重复 重复的元素去掉,第二次第多次出现的去掉
duplicated(x) #对应元素是否重复返回逻辑值
table(x) #重复值统计 向量中各取值出现次数统计
sort(x) #排序,默认从小到大排序
sort(x,decreasing = F)
sort(x,decreasing = T)
对两个向量进行操作
代码语言:{r}复制x = c(1,3,5,1)
y = c(3,2,5,6)
#(1)比较运算,生成等长的逻辑向
x == y # 注意是一一对应比较,1跟3比,3跟2比,5跟5比,1跟6比
y == x #写法不同,但是逻辑以及结果与x == y等同
#(2) 数字计算
x y #也是一一对应相加
#(3)连接
paste(x,y,sep=",") #连接xy,但是需要使用,进行连接
#当等位运算时,两个向量长度不一致时,短向量发生循环补齐至与长向量一直的长度,返回来的逻辑值数量与长向量一致。但是会出现warning提示。
x = c(1,3,5,6,2)
y = c(3,2,5)
x == y # 啊!warning!
#(4)交集、并集、差集 不管出现多少次,都会去重哦
intersect(x,y) #交集
union(x,y) # x、y的并集
setdiff(x,y) #差集,x有y无
setdiff(y,x) #差集,y有x无
重点
代码语言:{r}复制# %in% 前后位置很重要,对调之后意义不同
x = c(1,3,5,1)
y = c(3,2,5,6)
x %in% y #x的每个元素在y中存在吗,返回的逻辑值长度与x长度一致
y %in% x #y的每个元素在x中存在吗,返回的逻辑值长度与y长度一致
#x==y和x%in%y的区别
x==y #x与对应位置的y相等吗
x%in%y #x的每个元素在y中存在吗?
向量筛选取子集
代码语言:{r}复制#取子集专用中括号:[]:将TRUE对应的值挑选出来,FALSE丢弃。
x <- 8:12
#根据逻辑值取子集
x[x == 10] #[]外面是需要筛选的向量,里面是逻辑值,返回与x长度相同,且一一对应的逻辑值向量,取逻辑值为TRUE的值
x[x < 12]
x[x %in% c(9,13)]
#根据位置取子集
x[4] #取出x的第四个元素
x[2:4] #取出x的第2-4个元素
x[c(1,5)] #取出x的第1、5个元素
x[-4] #取出x的除第4个元素外的元素
x[-(2:4)] #取出x的除第2-4个外的其他元素
# 按照逻辑值:中括号里是与x等长且意义对应的逻辑值向量
# 按照位置:中括号里是由x的下标组成的向量,是向量哦
##如何修改向量中的某个/某些元素
代码语言:{r}复制x=c(8,9,10,11,12);x
##改一个元素
x[4] <- 40;x
#改多个元素
x[c(1,5)] <- c(80,20);x
#改了但没被R所记录,重要思想:R语言的修改,都要赋值,没有赋值就没有发生
# 所以以上改为:
x=c(8,9,10,11,12);x
##改一个元素
x=x[4] <- 40;x
#改多个元素
x=x[c(1,5)] <- c(80,20);x
简单向量作图
代码语言:{r}复制k1 = rnorm(12);k1
k2 = rep(c("a","b","c","d"),each = 3);k2
plot(k1)
小知识
代码语言:{r}复制#编程语言里,空格和减号-都是特殊字符,不要随意使用,建议使用下划线_
#向量的组成部分是元素,长度(length)是数元素的个数
#不同的函数存在“默认思想”
#英文? 函数名可以查找函数的帮助文档
?sort
# 能用函数千万不要手动去数,姐妹们呀
#paste与paste0的区别
x = c(1,3,5,1)
y = c(3,2,5,6)
paste(x,y) #默认空格连接
paste0(x,y) #默认直接连接
paste(x,y,sep = "") #不使用默认值,没有空格直接连接
#等位运算:比较运算、数学计算、连接。即:向量中的元素一对一的进行计算
#循环补齐发生的条件:1.等位运算(两个向量,元素与元素之间一对一的计算);2.两个向量长度不相等。最终产生多少个逻辑值还需要要长向量的长度
#取子集专用中括号:[]:将TRUE对应的值挑选出来,FALSE丢弃。
#R特有的变量保存格式:Rdata
#用处:存储有用的变量,准备下一次使用
#save(g,s,file="gands.Rdata") #将g和s两个变量存储到gands.Rdata中
#load("gands.Rdata") #加载gands.Rdata,让里面存储的变量出现在环境中
练习题
代码语言:{r}复制# 练习2-4
# 说明:运行load("gands.Rdata"),即可得到和使用我准备的向量g和s,
# 如有报错,说明你的代码写错或project没有正确打开
# 1.用函数计算向量g的长度
#length(g)
# 2.筛选出向量g中下标为偶数的基因名。
# g[seq(2,100,2)] #根据下标筛选
# 3.向量g中有多少个元素在向量s中存在(要求用函数计算出具体个数)?将这些元素筛选出来# 提示:%in%
#table(g%in%s) 或sum(g%in%s)
# 4.生成10个随机数: rnorm(n=10,mean=0,sd=18),用向量取子集的方法,取出其中小于-2的值
引自生信技能树
This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.
代码语言:{r}复制
When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
代码语言:{r cars}复制summary(cars)
Including Plots
You can also embed plots, for example:
代码语言:{r pressure, echo=FALSE}复制plot(pressure)
Note that the echo = FALSE
parameter was added to the code chunk to prevent printing of the R code that generated the plot.