如何学号R语言?
当然是先学好基础知识啦!
下面是我总结的R语言的基础代码
C <- (“a”)
typeof©
#特殊值
#NA,not available,表示缺失值
a <-100
a[1] #?
a[2] #?
num_vec <- c(1,2)
length(num_vec) <- 4
#Inf 无穷大
10/0
-10/0
#NAN,not a number,无意义的值
0/0
Inf-Inf
#NULL,表示数据空值
num_vec1 <- c(1,5,NaN)
length(num_vec1)
num_vec2 <- c(1,5,NULL)
length(num_vec2)
#运算符
#逻辑运算符 & 和 &&
logi_vec1 <- c (T,F,T)
logi_vec2 <- c (F,T,F)
logi_vec1 & logi_vec2 #?
logi_vec1 && logi_vec2 #?
logi_vec1 <- c (T,F,T) #向量长度不同短的循环补齐
logi_vec2 <- c (T,T,T,F)
logi_vec1 & logi_vec2 #?
logi_vec1 && logi_vec2 #?
logi_vec1 <- c (T,F,T) #向量长度不同,短的循环补齐验证代码
logi_vec2 <- c (F,T,T,T,T,T)
logi_vec1 & logi_vec2 #?
logi_vec1 <- c (T,F,T,T,F,T) #验证循环补齐等价代码
logi_vec2 <- c (F,T,T,T,T,T)
logi_vec1 && logi_vec2 #?
#逻辑运算符 | 和 ||
logi_vec1 <- c(T,F,F)
logi_vec2 <- c(F,T,F)
logi_vec1 | logi_vec2 #?
logi_vec1 || logi_vec2 #?
#向量
vec <- c(2,3,4)
#访问元素
vec[1]
vec[0]
vec[2:3]
vec[2:5]
vec[c(1,3)] #访问不连续的怎么办
vec[c(1,3,3)] #想重复访问
#添加元素
vec
vec <- c(vec[1:2],10,vec[3])
vec
#删除元素
vec
vec <- vec[-3]
vec
#获取向量长度
vec <- letters
vec
length(vec)
vec[-length(vec)]
vec[-length(vec):-length(vec)+2]
-length(vec)😦-length(vec)+2)
vec[-length(vec)😦-length(vec)+2)]
#创建向量
#Q:创建向量的方向
1:5
1:-5
#1,3,5,7,9 创建等差数列
?seq
example(seq)
seq(1,9,by = 2)
#将某向量重复多次创建向量
vec <- 1:3
#1 2 3 1 2 3 1 2 3
?rep
example(seq)
seq(vec, each = 3)
#1 1 1 2 2 2 3 3 3
#创建向量长度为0的向量
new.vec <- c()
length(new.vec)
new.env()
#判断某班级的学生的年龄是不是都是18岁以上?
stu <-sample(1:19,19,replace = F)
stu
stu >= 18
all(stu <= 20)
stu <- sample(c(18,19),10,replace = T)
stu
all(stu >= 18)
#判断班级学生的年龄是否存在18岁以下的?
stu <- sample(c(17,18,19),10,replace = T)
stu
any(stu < 18)
stu <- sample(c(18,19),10, replace = T)
stu
any(stu<18)
#any all 可以应用到什么场景中?
#向量运算,算数运算,关系运算,逻辑运算
vec1 <- c(1,2)
vec2 <- c(10,20)
vec1 * vec2
vec1 == vec2
vec1 | vec2
#向量运算-循环补齐
vec1 <- c(1,2)
vec2 <- c(10,20,30)
vec1 + vec2
vec2 <- c(10,20,30,40)
vec1 + vec2
#向量元素筛选,找出向量中的偶数
vec <- 1:10
new.vec <- vec[vec %% 2 == 0]
new.vec
vec&&2 == 0
vec[c(F,T,F,T,F,T,F,T,F,T)]
vec <- c(1:5,NA)
vec[vec %% 2 == 0]
subset(vec,vec %% 2 == 0)
#找出向量中的偶数的下标
vec <- 5:8
which(vec %% 2 == 0) [1]
which(vec = 100) [1]
#寻找水仙花数
vec <- 100:999
first.num <- nums %/% 100
second.num <-(num %% 100) %/% 10
third.num <- nums %% 10
nums [(first.num ^ 3 + seconf.num ^3 +third.num ^ 3) == nums]
#矩阵
#矩阵的创建
m <- matrix (1:8, nrow = 2)
#按行创建矩阵
m <- matrix(2:5, nrow = 2, byrow = T)
M
matrix(c(1,5,2,6,3,7,4,8),nrow = 2)
#矩阵运算
m1 <- matrix (1:4, nrow = 2)
m2 <- matrix (2:5, nrow = 2)
m1;m2
m1 + m2
m1 * m2
#矩阵运算,可以循环补齐吗
m1 <- matrix (1:4, nrow = 2)
m2 <- matrix (2:7, nrow = 2)
m1;m2
m1 + m2
m1 <- matrix (1:4, nrow = 2)
m2 <- matrix (2:3, nrow = 1)
m1;m2
m1 + m2
#矩阵索引
m1 <- matrix (1:12, nrow = 12)
m
m[,2:3]
m[1:3,] #一定要加逗号
m[1:3]
m[1:5]
#访问矩阵某行
m
m[,]
#访问矩阵某列
m
m[,2]
m[,1<=2]
#矩阵的元素按照条件筛选
m <- matrix(1:12, nrow = 4)
m
first.col <- m[,1]
first.col
first.col %% 2 == 0
m[first.col %% 2 == 0,]
m[first.col %% 2 == 0 & m[,2] > 6,]
#获取矩阵的函数和列数
m
mrow(m)
ncol(m)
#矩阵删除元素
m <- matrix(1:12,nrow =4)
m
m[-1,]
m[,-1]
m[-1,-1]
#改变矩阵的值
m
m.value <- matrix(rep(6.0),nrow = 2)
m.value
m[c(1,3),]
m[c(1,3),] <- m.value
m
#应用:修改图片
install.packages(“pixmap”)
library(pixmap)
p <- read.pnm(python.pgm)
p
plot§
str§
p2 <- p
p2 @grey[80:103,10:60] < -1
plot(p2)
#apply函数,对矩阵的行或者列调用函数
?apply
#apply(m,dim.index, f)dim.index:1代表每一行应用函数f,2代表每一列应用函数f
m <- matrix(1:6,nrow =3)
m
#求每一行最大值
apply(m,1,max)
#求每一列最大值
apply(m,2,max)
#cbind()rbind()组合矩阵数据
m <- matrix(1:12, nrow = 3)
m
col.v <- matrix(21:26, nrow = 3)
cbind(m,col.v)
rbind(m,col.v)
row.v <- matrix(21:28, nrow = 2)
row.v
rbind(m,row.v)
#数组
#数组
test1 <- matrix(sample(90:100,6,replace =F), nrow = 2)
test1
test2 <- matrix(sample(90:100,6,replace = F), nrow = 2)
test2
test <- array(data=c(test1,test2),dim=c(2,3,2))
test
attributes(test)
str(test)
test[,1]
test[1,1]
test[,1,1]
test[1,1,1]
#列表
#创建列表
stu.lst <- list (name = “xiaoming”, id=1001,is.past.exam = T)
stu.lst
stu.lst2 <- list(“xiaoming”,1001,T”) #可以不给列表加标签
stu.lst2
new.1 <- vector(mode = “list”)
new.1
new.1[[“name”]] <-“xiaoming”
new.1
#列表常规操作
#列表索引
stu.lst
stu.lstKaTeX parse error: Expected 'EOF', got '#' at position 123: …me2 str(name2) #̲双中括号一次提取出的是列表的一…age <- 19
stu.lst
length(stu.lst)#获取列表的长度
stu.lst[[5]] <- 98
stu.lst
stu.lst[6:8] <- 1:3
stu.lst
#列表删除元素
stu.lst
stu.lst[[8]] <- NULL
stu.lst
stu.lst[6:7] <- NULL
stu.lst
stu.lstKaTeX parse error: Expected 'EOF', got '#' at position 21: …- NULL stu.lst #̲将多个列表拼接为一个列表 st…stu.name
stu.info[,1]
stu.info[1,]
#添加新列
stu.infoKaTeX parse error: Expected 'EOF', got '#' at position 26: …7,18);stu.info #̲查询 stu.info[whi…age>=18),]
stu.info[stu.info$age>=18,]
#矩阵转数据框
mat <- matrix (1:12,nrow=3) ; mat
mat.df <- as.data.frame(mat) ;mat.df
#列表的高级操作
#merge
stu.id.math <- c (1001,1003)
stu.math.score <- c(89,90)
stu.math.df <- data.frame (stu.id.math,stu.math.score) ;stu.math.df
?merge
merge(stu.info,stu.math.df,by.x = “stu.id”,by.y = “stu.od.math”)
#合并
#cbind,rbind
stu.info
new.stu <- data.frame(list(stu.name=“xiaohua”,stu.id=1004,age=19)) ;new.stu
stu.info <- rbind(stu.info, new.stu) ; stu.info
python.score <- c (99,100,100)
stu.info <-cbind(stu.info,python.score); stu.info
r.score <- c (98,99,100)
stu.info <-cbind(stu.info,r.score); stu.info
lapply (stu.info, max)
lapply(stu.info[3:ncol(stu.info)], max)
sapply(stu.info[3:ncol(stu.info)], max)
#因子
sex <- c(1,2);sex
#创建因子
sex.f <- factor(sex);sex.f
str(sex.f)
stu.sex <- sample(1:2,10,replace= T); stu.sex
stu.sex.f<-factor(stu.sex) ; stu.sex.f
stu.sex.f<- factor(stu.sex, levels = c(1,2));stu.sex.f
stu.sex.v <- as.vector(stu.sex.f);stu.sex.v
stu.sex.v <- as.vector(stu.sex.f);stu.sex.v
#有序因子
stu.sex.ord<- ordered (stu.sex, levels = c(1,2));stu.sex.ord
stu.sex.ord<- ordered (stu.sex,levels = c(2,1));stu.sex.ord
#cut函数
stu.r.score<- c(60,sample(60:100,8,replace = T),100);stu.r.score
stu.r.score.level <- cut (stu.r.score,breaks = 4);stu.r.score.level
#tapply()函数
tapply(stu.r.score, stu.sex, mean)
就这些啦!