在R Studio 中新建项目(R project)
File → New Project → New Directory → New Project → Directory name(填英文名不能有中文空格和特殊字符) → Create project as subdirectory of(选择路径) → Create
结果:如图右下角有新建文件夹、右上角有text1且电脑路径内也有该文件夹

新建脚本
File → New File → R Script

脚本的运行方式
- 逐行运行:光标放在一行的任意位置
- 选中运行:选中全部运行
快捷键: Windows是Ctrl + Enter Mac是cmd + Enter
使用“#”为脚本添加注释
脚本的保存
离脚本第一行最近的保存为脚本的保存,保存后命名(.R结尾)(脚本默认位置在工作目录 R project)
getwd()#查看工作目录
R语言的几类命令响应
- 报错:出现 Error 就是错了,检查命令、环境,修正后重新运行
- 警告:出现 Warning 不用理他,忽略
- 没反应:看是否出现大于号,出现大于号表示运行完成了
- 命令正在运行:出现红色键,中止(点击红色键)或等待
- 命令不完整:出现加号,tab 补全命令或按 ESC 键退出
- 出现大片提示信息:检查是否有Error,没有就忽略
- R问你问题 ?[a/s/n]:必须回答,可输入n,回车
数据类型和向量
- 字符型:字母和数字的组合(“a” “nn” “a1”)
- 数值型:纯数字(1 2 3.2 )
- 逻辑型:TRUE/FALSE/NA (T/F/NA)
class()#判断数据类型
tips:光标放在>后面,摁向上键可修改上一条命令重新运行
== #判断是否相等
!=#判断是否不相等(不相等为TRUE)
&#与 |#或 !#非
is族函数,判断,返回值为TRUE或FALSE
is.numeric(1)# 是否数值型数据
is.logical(1) #是否逻辑型数据
is.character("a") #是否字符型数据
as族函数实现数据类型之间的转换
as.numeric(1) #将其他数据类型转换为数值型(要本来就是数字)
as.logical(1) #将其他数据类型转换为逻辑型
as.character(1)# 将其他数据类型转换为字符型
数据结构

脚本打开是乱码的解决方案
File → Reopen with Encoding → UTF-8 → OK
向量的生成
#(1)用 c() 结合到一起
c(2,5,6,2,9)
c("a","f","md","b")
#(2)连续的数字用冒号“:”
1:5
#(3)有重复的用rep(), 有规律的序列用seq(),随机数用rnorm(符合正态分布的)
rep("gene",times=3)
seq(from=3,to=21,by=3)
rnorm(n=3)
#(4)通过组合,产生更为复杂的向量。
paste0(rep("gene",times=3),1:3)
数据转换规则尽量不产生NA

对单个向量进行的操作
#(1)赋值给一个变量名
x = c(1,3,5,1) #随意的写法
x
x <- c(1,3,5,1) #规范的赋值符号 Alt+减号
x
#赋值+输出一起实现
x <- c(1,3,5,1);x
(x <- c(1,3,5,1))
#(2)简单数学计算
x+1
log(x)
sqrt(x)
#(3)根据某条件进行判断,生成逻辑型向量
x>3
x==3
#(4)初级统计
max(x) #最大值
min(x) #最小值
mean(x) #均值
median(x) #中位数
var(x) #方差
sd(x) #标准差
sum(x) #总和
length(x) #长度(指向量里的元素个数)
unique(x) #去重复(去掉后面的)
duplicated(x) #对应元素是否重复(返回哪一个位置上的数据是重复出现的,重复位置输出值为TRUE)
table(x) #重复值统计
sort(x)#排序(默认从小到大)
sort(x,decreasing=T)#从大到小排
rev(sort(x))#从大到小排
?+函数可看帮助文档
对两个向量进行的操作
x = c(1,3,5,1)
y = c(3,2,5,6)
#(1)逻辑比较,生成等长的逻辑向量
x == y
x %in% y #x中的元素在y中吗(以x为核心,x有几个元素返回结果就有几个元素)
#(2)数学计算
x + y
#(3)“连接“
paste(x,y,sep=":")#paste(x,y,sep="")等同于paste0
#(4)交集、并集、差集
intersect(x,y)#三个取交集可先对两个取交集,后用交集与另一个取交集
union(x,y)
setdiff(x,y)#x里面存在,y里面不存在
setdiff(y,x)#y里面存在,x里面不存在
#当两个向量长度不一致时,短的循环补齐长的
x = c(1,3,5,6,2)
y = c(3,2,5)
例:把感兴趣的30个基因从1000个基因里挑出来
思路:判断1000个里有哪些是存在于30个里的,即1000为x30为y,使用x %in% y(或intersect(x,y)取交集)
向量筛选(取子集)
[ ]:将TRUE对应的值挑选出来,FALSE丢弃,[ ]里为能单独运行的逻辑值向量,中括号里外的长度要相等,不然麻烦
x <- 8:12
#根据逻辑值取子集
x[x==10]#提取出x=10的值
x[x<12]
x[x %in% c(9,13)]#提取出在9和13中存在的x
#根据位置取子集
x[4]
x[2:4]
x[c(1,5)]
x[-4]
x[-(2:4)]
按照逻辑值:中括号里是与x等长的逻辑值向量
按照位置:中括号里是由x的下标组成的向量
修改向量中的某个/某些元素:取子集+赋值*
x[4] <- 40
x
x[x>10] <- 10
x
简单向量作图
k1 = rnorm(12);k1
k2 = rep(c("a","b","c","d"),each = 3);k2
k2 = rep(c("a","b","c","d"),times = 3);k2#each和times的区别:each为a a a a b b ... times为a b c d a b..
plot(k1)
boxplot(k1~k2) #k1纵坐标 k2横坐标 boxplot箱线图
向量匹配排序
match(x,y)
#[1] 4 1 5 2 3 ##根据x,调整y的顺序,返回的结果是y的下标 (按x顺序排列)
网友评论