说明:报了学校的课《R语言与统计分析》,随手分享一下课堂笔记。最近比较忙所以就不整理了直接发叭,一切随缘,如果感兴趣的话可以自己测试代码输出结果。
- 直接创建向量
x<-1:5 x<-5:-1 x<-c(88,5,12,13)
- 用已有变量创建新向量
x<-c(88,5,12,13) y<-c(x[1:3],1,168,x[4]) y
- 先声明再填写向量元素
x<-vector(length=2) x[1]=5 x[2]=12 x
- seq函数生成向量,指定起始、步长or长度
seq(from=1,to=10,by=3) seq(from=1,to=10,length=3)
- rep函数重复向量,指定重复次数或者每个元素重复个数
rep(2,3) rep(c(2,3,4),2) rep(1:3,each=2)
- 获取向量长度
length(x)
- 空向量,NULL,长度为0
x<-c() length(x)
- 由向量生成矩阵,按列排放各个元素
x<-1:6 x<-matrix(x,2,3) x
- 索引元素
x<-c(88,5,12,13) x[4] # 索引一个元素 x[1:3] # 连续索引多个元素 x[c(1,3)] # 索引由向量指定位置的元素
- 条件索引/筛选
x<-c(1,4,6,8,9,10) x[x>5] # 输出x向量中大于5的元素值 which(x>4) # 输出x向量中大于5的元素下标 x<-c(1:2,NA,3:4) x[x>2] # 如果x向量中含有缺失值NA,则输出结果含有NA subset(x,x>2) # 使用subset函数,输出结果不含NA
- 负数索引:删除向量元素,但是原向量不变
x<-c(88,5,12,13) x[-2] x[-1:-3] x
- 按名称索引
x<-1:3 names(x)<-c('a','b','c') x['c']
- 循环补齐原则
c(1,0,4)+c(5,3,6,7,9) x<-matrix(1:6,3,2) x x+c(1,2)
- 运算符是函数
1+6 "+"(1,6) 1/6 "/"(1,6)
- 向量间的运算是各个元素间的运算
x<-c(1,5,0) y<-c(5,-2,1,2,4,5,2) z<-x*y # 循环补齐 z
- 【易错】运算符的优先级:() > : > -
# 注意 : 的优先级是大于+-的,这在写循环语句、连续索引元素时容易犯错 i<-10 1:i-1 # 1:i-1 = (1:i)-1 先生成1:10向量,再使各元素-1,输出0:9 length(1:i-1) # 输出10 i<-10 1:(i-1) # 生成1:9向量 length(1:(i-1)) # 输出9
- all:全与判断,any:全或判断
x<-1:8 all(x>5) any(x>5)
- 排除缺失值求均值
x<-c(20,NA,30,40) mean(x) mean(x,na.rm=TRUE)
【homework】实现函数f(x):输入为向量x,遍历此向量,如果i, i+1, i+2位置所对应的数的绝对值都小于1,则输出i。写函数实现以上功能, 并调用f(rnorm(1000))
f<-function(x,k=2){
n<-length(x) # n是输入向量的长度
y<-abs(x) # 取绝对值
ans<-c()
for (i in 1:(n-k)){
if ( all(y[i:(i+k)]<1) ){ # 易错:优先级问题,() > : > +-
ans=c(ans,i)
}
}
return(ans)
}
set.seed(520) # 设定随机数种子
f(rnorm(1000))
length(f(rnorm(1000)))/1000 # 计算绝对值小于1的元素占比