一.Vector 向量
1.创建一个向量(num, char, logical, factor)
v1 = c(1, 2, 3, 4, 0.15) # num类型向量,c()代表连接
v2 = c("Apple", "Banana", "Cherry") # char类型向量
v3 = c(TRUE, FALSE) # logical类型向量
v4 = factor(v3) # factor类型变量
c(v1,v2) # 自动将num类型转换为char类型与v2连接
names(v2) = c("int","decimal") # 给变量值添加名称
【向量类型运行结果】
2.简单的数学运算和逻辑运算
# 简单的数学运算
c(9, 9, 6) + c(2, 5, 1) # 加法 11 14 7
c(9, 9, 6) - c(2, 5, 1) # 减法 7 4 5
c(9, 9, 6) * c(2, 5, 1) # 乘法 18 45 6
c(9, 9, 6) / c(2, 5, 1) # 除法 4.5 1.8 6.0
c(9, 9, 6) %/% c(2, 5, 1) # 整除 4 1 6
c(9, 9, 6) %% c(2, 5, 1) # 取余 1 4 0
c(9, 9, 6) ^ c(2, 5, 1) # 乘方 81 59049 6
c(1, 2, 3) + c(10, 100, 1000, 10000) # 缺值默认为1
c(1, 2, 3) + 1 # 各位都加1
# 向量的逻辑运算
TRUE & TRUE # 与
TRUE | FALSE # 或
!FALSE # 非
3.创建更复杂的向量(seq,rep)
v1 = 1:100 # 创建1~100
v3 = seq(from=100, to=1, by=-3) # 创建100~1内,每次减3的向量,from,to,by可以省略)
rep(1:5, each=3) # 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
rep(1:5, times=3) # 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
rep(1:5, times=1:5) # 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5
4.字符向量的粘贴
paste(c("a", "b", "c"), c("x", "y", "z"), sep="") # "ax" "by" "cz"
paste(c("a", "b", "c"), c("x", "y", "z"), collapse="&") # "a x&b y&c z"
paste("x", 1:5, sep="", collapse="+") # "x1+x2+x3+x4+x5"
5.向量的索引
v1 = c(6:10, 1:5) # 6 7 8 9 10 1 2 3 4 5
v1[1] # 6,!!!R语言第一个数索引为1,不是0,与其他编程语言不一样
v1[-1] # 7 8 9 10 1 2 3 4 5,R语言中-是把那一个位置上的向量删除
习题
Q1: 找出1~100以内所有能被4除余1的整数。
v1 = seq(1,97,4)
Q2: 《孙子算经》今有物不知其数,三三数之剩其二,五五数剩其三,七七数剩其二,问物几何?(不完善)
v1 = seq(9,1000,7)
v1[v1 %% 3 == 2 & v1 %% 5 == 3 & v1 %% 7 ==2]
# 只能实现找出1~1000内的解,感觉方法不够完善
Q3: 求出从公元元年到公元1000年中,所有闰年的年份。 (闰年的定义: 能被4整除,且不能被100整除,但能被400整除的除外)
v1 = seq(0,1000,1)
v1[v1 %% 4 == 0 & v1 %% 100 != 0 | v1 %% 400 == 0]
Q4:创建一个等差序列: 8,11,14,…,50。
seq(from=8, to=50, by=3)
Q5:Q4序列中能被5整除的是哪些数?
v1 = seq(8, 50, 3)
v1[v1 %% 5 == 0]
Q6:创建一个等比序列: 1,2,4,8,…,8192。
2^(0:13)