前言
Hello CSDN! 第一次写CSDN博文,感觉和其他的博客写作方式很不一样,之前一直是膜拜其他文章。马上要考试R语言了,想通过CSDN记录我的复习过程,可能有许多不足的地方,希望大家多多指教!
数字、字符与向量
基础运算
哈哈哈哈好有意思,用CSDN写文章好高级:
#向量的赋值
x = c(1,2,3,4,5) #法一,我最喜欢这个办法
assign("x1",c(1,2,3,4,5)) #法二
c(1,2,3,4,5) -> x2 #法三
y=c(x,0,0,x1) #定义y有12个分量,两边分别是变量x,x1中间是俩0
运行结果: (^ ~ ^) 高亮
对于向量的运算,记录几个常见的:
#运算
x*y
x/y
x^2
12%/%5 # %/%为整除
12%%5 # %%为求余数
range(x) #求向量x的范围
min(x) #就不多说了哈哈哈哈
which.max(x) #表示第几个分量求到最大值
exp(x)
sqrt(x) #当自变量为向量时,返回值也为向量
sqrt(-2+0i) #复数开根时候,需要加上i呦
运行结果:
下边时与一些与向量运算有关的函数,由于复习要查漏补缺,所以就放这些啦
sum(x) #求向量x的分量之和
prod(x) #求向量x的分量的连乘积
length(x) #求向量x的分量的个数
median(x) #求向量x的分量的中位数
sd(x) #求向量x的分量的标准差
p=c(3,5,1,4,2)
sort(p)
order(p) #下标列出
sort.list(p)
运行结果:
产生有规律的序列
哇哦,第一次使用文本有些激动。下面我就要学习如何去快速生成有规律的序列啦,真是前人栽树,后人乘凉。
#等差数列
> 3.14:6
[1] 3.14 4.14 5.14
> 3:7.6
[1] 3 4 5 6 7
> 2*1:4 #等差运算优于乘法运算
[1] 2 4 6 8
> 1:7-1
[1] 0 1 2 3 4 5 6
> 1:(7-1)
[1] 1 2 3 4 5 6
#间隔数列
> seq(-5,5,by=.2)
[1] -5.0 -4.8 -4.6 -4.4 -4.2 -4.0 -3.8 -3.6 -3.4 -3.2
[11] -3.0 -2.8 -2.6 -2.4 -2.2 -2.0 -1.8 -1.6 -1.4 -1.2
[21] -1.0 -0.8 -0.6 -0.4 -0.2 0.0 0.2 0.4 0.6 0.8
[31] 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8
[41] 3.0 3.2 3.4 3.6 3.8 4.0 4.2 4.4 4.6 4.8
[51] 5.0
> seq(length=51,from = -5,by=.2)
[1] -5.0 -4.8 -4.6 -4.4 -4.2 -4.0 -3.8 -3.6 -3.4 -3.2
[11] -3.0 -2.8 -2.6 -2.4 -2.2 -2.0 -1.8 -1.6 -1.4 -1.2
[21] -1.0 -0.8 -0.6 -0.4 -0.2 0.0 0.2 0.4 0.6 0.8
[31] 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8
[41] 3.0 3.2 3.4 3.6 3.8 4.0 4.2 4.4 4.6 4.8
[51] 5.0
> #重复函数
> rep(x,2)
[1] 1 2 3 4 5 1 2 3 4 5
> x>3
> [1] FALSE FALSE FALSE TRUE TRUE
is.na()检测缺失数据
is.nan()检测数据是否不确定
is.finite()检测数据是否有限
is.infinite()检测数据是否无穷
> m=c(0/1,0/0,1/0,NA)
> m
[1] 0 NaN Inf NA
> is.na(m) #检测缺失数据
[1] FALSE TRUE FALSE TRUE
> is.nan(m) #检测数据是否不确定
[1] FALSE TRUE FALSE FALSE
> is.finite(m) #检测数据是否有限
[1] TRUE FALSE FALSE FALSE
> is.infinite(m)#检测数据是否无穷
[1] FALSE FALSE TRUE FALSE
paste( )可以把其自变量连成一个字符串,并用空格隔开
#复数向量
x=seq(-pi,pi,by=pi/10)
y=cos(x)
z=complex(re=x,im=y)
plot(z)
lines(z)
对于复数运算
Re()计算实部,Im()计算复数的虚部,Mod()计算复数的模,Arg()计算复数的幅角
向量下标运算
学习到这里,我决定休息一下,用一个清醒的大脑去进行下标运算的学习。
> x=c(1,6,3,5)
> x[3]
[1] 3
> x+5
[1] 6 11 8 10
> x=c(1,6,3,5)
> x[3]
[1] 3
> x+5
[1] 6 11 8 10
> (x+5)[2]
[1] 11
> x[c(1,3)]=c(123,456)
> x
[1] 123 6 456 5
将向量中缺失数据赋为0,我觉得这个在数据预处理的时候挺有用,get一个小技巧。
> #逻辑向量
> z=c(2,3:5,NA)
> z
[1] 2 3 4 5 NA
> z[is.na(z)]=0
> z
[1] 2 3 4 5 0
定义分段函数
> x
[1] 2 -6 3
> y=numeric(length(x)) #产生数值型向量
> y
[1] 0 0 0
> y[x<0]=1-x[x<0]
> y[x>=0]=1+x[x>=0]
> y
[1] 3 7 4
下边的也是一些基础向量下标操作,这里的A是字符串呦。
> #运算
> v=c(1:10)
> v[1:4]
[1] 1 2 3 4
> v[c(1,4,5)]
[1] 1 4 5
> v[-(1:5)]
[1] 6 7 8 9 10
> #定义向量还可以给元素加名字呦
> score=c(A=99,B=200,C=30)
> score
A B C
99 200 30
> score["B"]
B
200
> #也可以之后在定义
> age=c(1,2,3)
> names(age)=c('A','B','C')
> age
A B C
1 2 3
对象和它的模式属性
R语言是一种基于对象的语言,R对象分为单纯对象和复合对象两种,单纯对象是所有元素都是同一种基本类型(如数值、字符串),but元素不在是对象;复合对象元素可以是不同类型的对象,每一个元素是对象。
固有属性: mode和length
向量类型: logical(逻辑型)、numeric(数值型)、complex(复数型)、character(字符型)等
z=1:5
is.character(z) #判断是否为某类型
[1] FALSE
as.character(z) #强制转换
[1] “1” “2” “3” “4” “5”
score=c(A=99,B=200,C=30)
attributes(score)
$names
[1] “A” “B” “C”
#更换属性
attr(score,“names”)=c(“z”,“x”,“c”)
attr(score,“type”)=“student”
score
z x c
99 200 30
attr(,“type”)
[1] “student”
attributes(score)
$names
[1] “z” “x” “c”
$type
[1] “student”
因子
factor()函数 把向量编码成一个因子
table()可以对因子进行计数
tapply() 可以实现分组计算
gl()可以方便的产生因子
> #因子
> sex=c("M","F","M","M","F")
> sexf=factor(sex)
> sexf
[1] M F M M F
Levels: F M
> height=c(174,165,180,171,160)
> tapply(height,sex,mean)
F M
162.5 175.0
> gl(4,5)
[1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4
Levels: 1 2 3 4
> gl(3,1,15)
[1] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
Levels: 1 2 3
其中gl()函数的参数如下:
结语
感谢大家能够看到这里,距离R语言考试还有7天,一周从入门到考试实战,撸起袖子加油干!