学习R语言是给数学家用的,大多符合人的逻辑而不是计算机的逻辑
分析对象一般是整个数据集而不是一个数据
第二章 科学计算器
**2.1数学运算符和向量
2.2变量赋值
2.3特殊字符
2.4逻辑向量
#2.1数学运算符与向量
#数学运算符两端空不空格都可以,空了提高可读性
#数学运算符和加法 可以加两个数和两个向量
#冒号运算符:创建一个数的开始到另一个数的结束 不像python一样不包括最后一个
#c函数会把一系列链接到一起
1:5+2:6
c(1,3,5,7)+c(0,1,3,6)
#在python中可能要用到循环
357911
14813
R的向量化的操作三重含义:
1.函数或运算符作用于向量中的每个元素,无需循环
2.函数把一个向量作为输入时,能汇总计算
3.参数向量化,特殊的是median()不是这样
add Codeadd Markdown
#1
c(1,3,5,7)+c(0,1,3,6)
#2
sum(1:5)
median(1:5)
#3
sum(1,2,3,4,5)
median(1,2,3,4,5) #因为不能计算,只把1输进去了
14813
15
3
15
1
除了加法有向量化还有减乘幂运算,两种除法,和余数
#减法
c(2,3,4,5,6)-2
-2:2*-2:2 #运算顺序先冒号 后乘号
identical(2^3,2**3) #^ **都可以表示求幂
1:10/3#浮点数除法
1:10%/%3#整数除法
1:10%%3#余数
01234
41014
TRUE
0.3333333333333330.66666666666666711.333333333333331.6666666666666722.333333333333332.6666666666666733.33333333333333
0011122233
1201201201
R包含了三角函数(sin,cos,tan,以及反三角函数asin,acos,atan),
对数和指数log和exp以及他们的变种log1p和expm1(log(1+x)和exp(1-x))
以及你能想到所有函数
cos(c(0,pi/4,pi))#pi为3.14……那个
exp(pi*1i)+1#欧拉公式 对于一个正整数n,小于或等于n的正整数中与n互质的正整数个数(包括1)的个数,记作 φ ( n )
factorial(7)+factorial(1)-71^2
choose(5,0:5)
10.707106781186548-1
0+1.22464679914735e-16i
0
15101051
#《《《《《《小补充 可以不看 》》》》》》》
# 计算组合数/排列数
print(choose(5,2))
print(factorial(3))
# 在向量中查找指定数据(数据可用向量形式给出),此函数返回一个和原向量等长的向量
# 存在待匹配数据的位置上标记为N(第N个待匹配数据就标记N)
x <- c(2,5,1,4,6,4,3)
print(match(x,4))
print(match(x,c(4,5)))
##
##组合数:choose(n,k) —— 从n个中选出k个
##阶乘:factorial(k) —— k!
##排列数:choose(n,k) * factorial(k)
##列出所有组合数矩阵:combn(x,n)
#转置:t(combn(x,n))
[1] 10
[1] 6
[1] NA NA NA 1 NA 1 NA
[1] NA 2 NA 1 NA 1 NA
关系运算符:
== != > < >= <=
(sqrt(2))^2-2
#操作符也是向量化
c(3,4-1,1+1+1)==3
1:3!=3:1
exp(1:5)<=100
(1:5)^2>=16
#非整型变量,由于以32位存储,所以只能取近似值,存在舍入误差
(sqrt(2))^2-2
TRUETRUETRUE
TRUEFALSETRUE
TRUETRUETRUETRUEFALSE
FALSEFALSEFALSETRUETRUE
4.44089209850063e-16
#R的all.equal()函数检查数字是否相等 就不会存在存储时的误差
#提供容忍度为1.5e-16,只要小于他的就可以忽略
all.equal(sqrt(2)^2,2)
#如果比较的值不一样,就返回差值
#如果要返回布尔值,就将isTrue()加入
all.equal(sqrt(2)^2,3)
isTRUE(all.equal(sqrt(2)^2,3))
TRUE
'Mean relative difference: 0.5'
FALSE
n
#==可以比较字符串 区分大小
#也可以用> <比较字符串(此问题待后续学习,用此方法 面对大小写的时候,语言环境结果会有所不同)
c("can","you","a","as","can!")=="can"
c("A","B","C","D")<"C"
TRUEFALSEFALSEFALSEFALSE
TRUETRUEFALSEFALSE
#2.2变量赋值
#给变量赋值时不需要申明
#<-(首选),=都可以给变量赋值
x<- 1:5
y=6:10
x+2*y-3#注意运算顺序
1013161922
#变量名可以是字母 数字 点 下划线 (不能是数字或点后面跟数字,保留字 if for等 最好用大小写字母)
#<<-对全局变量赋值(任意地方使用的变量)后续还会学
#assign()函数可以赋值,加上参数globalenv()将和<<-一样
assign("x",9^2);x
assign("x",9^2,globalenv());x
81
81
#想将复制打印出来,可以自己写变量x 或者在某些系统中直接print()
#还可以在一行中写入两个语句 或者将赋值语句写在括号里
#rnom rlnorm 函数分别生成正态分布随机数和对数正态分布随机数
z<-rnorm(5);z
(z<-rlnorm(5))
-1.24084961240796-0.5322325177741170.486914146600458-0.3194133248005720.0853927357337679
0.6700786868202170.6693973560729010.3617851840487691.02776414241880.204117580408696
#2.3特殊数字
#为了帮助运算,R支持四种特殊值:Inf -Inf NaN NA
#lnf 表示无穷大
#-lnf 表示无穷小
#Nan 没有确定数 就是不知无穷大还是无穷小
#NA缺失值
add Codeadd Markdown
c(Inf+1,Inf-1,Inf-Inf )
c(1/Inf,Inf/1,Inf/Inf )
c(sqrt(Inf),sin(Inf))
c(log(Inf),log(Inf,base=Inf))
c(NA +1,NA*5,NA+Inf)
c(NA+NA,NaN+NaN,NaN+NA,NA+NaN)
InfInfNaN
0InfNaN
Warning message in sin(Inf):
“NaNs produced”
InfNaN
Warning message in eval(expr, envir, enclos):
“NaNs produced”
InfNaN
<NA><NA><NA>
<NA>NaNNaN<NA>
x<-c(0,Inf,-Inf,NaN,NA)
is.finite(x)
is.infinite(x)
is.nan(x)
is.na(x)
TRUEFALSEFALSEFALSEFALSE
FALSETRUETRUEFALSEFALSE
FALSEFALSEFALSETRUEFALSE
FALSEFALSEFALSETRUETRUE
#2.4逻辑回归
#TRUE FALSE是系统的保留字 但是True这种不是 可以缩写成T和F,T和F不是保留字但是最好避免使用
#逻辑向量与运算
#非 &与 |或
add Codeadd Markdown
(x <- 1:10>=5)
!x
(y <- 1:10%%2>=5)
x&y
x|y
FALSEFALSEFALSEFALSETRUETRUETRUETRUETRUETRUE
TRUETRUETRUETRUEFALSEFALSEFALSEFALSEFALSEFALSE
FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
FALSEFALSEFALSEFALSETRUETRUETRUETRUETRUETRUE
nt<-c(F,F,F) #not true不对 some true有些对 all true全对
st<-c(F,F,F)
at<-c(F,F,F)
any(nt)
any(st)
any(at)
all(nt)
all(st)
all(at)
FALSE
FALSE
FALSE
FALSE
FALSE
FALSE