###R的快速入门###
##1 R的基本语法##***************************************************************
#求助*
help.start()#启动R的web帮助
?rnorm
help(rnorm)#显示“rnorm”函数的帮助页面,包括它所在的程序包(package), 详细的描述, 用法以及例子等
apropos(“norm”) #获得名字中带字符“norm”的所有函数
args(rnorm) #得到rnorm函数的自变量列表
#注意*
#R命令提示符 >
#R命令和名称*大小写*敏感!
#R命令中不可使用全角的标点,注意区别!只可用英文!
#语法*
#符号*
#> 命令或运算提示符
#+ 续行符
#基本算术运算
#+ 加号
#- 减号
#* 乘号
#/ 除号
#^ 乘方*$$$$$$$$
#=, <-赋值符 ps:从右往左赋值$$$$$$$$
#******例子******#
3+5
3-5
3/5
3^5
x=5
(10+2)*2
n<-(10+2)*5
x=x+x
x<-x+x
x<-y<-5
(a<-n*x)#$$$$$$$式子外面加括号表示输出计算结果
#逻辑运算*判断$$$$$$$$
#== 相等
#!= 不等
# | 或
# & 且
#逻辑值: TRUE(或T), FALSE(或F)
#例子:
7!=6
!(7==6) # !表示取否命题
(7==9)|(7>0) #只要一个是真命题 就是真命题
(7==9)&(7>0)
c(13,4,9,-7,18) > 7#向量的逻辑运算
#向量是R中最为基本的类型!!!!!!********$$$$$$$$****************************
#向量的类型包括以下四种$$$$
#数值型 一切实数
#逻辑型 TRUE FALSE
#字符型 "statistic" $$$$$
#复值型 1i $$$$
#一个向量中元素的类型必须相同!!!
#如何查看向量或者对象的类型:*
mode() #查看对象的类型¥¥¥¥
length() #查看对象的长度,指元素个数¥¥¥¥
#例子:
x <- 1
mode(x)
length(x)
A <- "statistic "
b <- TRUE
d <- 1i
mode(A)
mode(b)
mode(d)
NA #--- 缺失值(not availabel)
NaN #--- 表示不是数字的值(not a number) 报错
sqrt(-2) #开方
#*****************************************#
#向量的建立**************************
#建立数值向量的函数
seq()#若向量(序列)具有较为简单的规律
rep()#若向量(序列)具有较为复杂的规律
sequence()#若向量(序列)为整数序列
c() #若向量(序列)没有什么规律(常用)
#例子:
c(4,7,17) #生成元素为(4 7 17)的向量。
seq(1,10,by=0.5) # =seq(from=1,to=10,by=0.5)
seq(1,10,length=21) # = seq(1,10,length.out=21)
rep(2:5,2) # = rep(2:5, times=2) 2345重复两次
rep(2:5, c(1,2,3,4)) # [2 3 3 4 4 4 5 5 5 5]
rep(1:3, times = 4, each = 2) #重复4次,每个重复出现2遍
sequence(10) # sequence(n) 生成1~10 1 2 3 4 5 6 7 8 9 10
seq(10)
#数值向量的运算****************************************************
#例子
5 + c(4,7,17)
5 * c(4,7,17)
c(-1,3,-17) + c(4,7,17)
c(2,4,5)^2
sqrt(c(2,4,25)) #开根号
mean(c(2,4,9)) #取均值
var(c(2,4,9)) #取方差
1:2+1:4 #较短的向量会自动循环替补
#字符向量
(Z <- c("green" , "blue sky", "-99"))
mode(Z)
#逻辑向量
x <- c(10.4, 5.6, 3.1, 6.4, 21.7)
x > 13
sum(x>13)#求个数$$$$
#逻辑向量可以在普通的运算中被使用,此时它被转化为数字向量, FALSE当做0, TRUE当做1.
(x>13) + 1
###因子(factor)向量###
###将字符向量转换成因子 因子化 factor()
a <- c("green", "blue", "green", "yellow")
factor(a)
#levels --- 表示因子的水平
###将数值型向量转换成因子
b <- c(1,2,3,1)
b<- factor(b)
b
###将字符型因子转换成数值型因子
ff <- factor(c("A", "B", "C"), labels=c(1,2,3))#换标签
ff
###将数值型因子转换为字符型因子
ff <- factor(1:3, labels=c ("A", "B", " C "))
ff
###给因子b的水平命名
levels(b) <- c("low", "middle", "high")
gl(k, n, label, length)产生规则的因子序列
#k --- 水平数
#n --- 每个水平重复的次数
#label --- 指定每个水平因子的名称(可选)
#length --- 指定产生数据的个数(可选)
#例如:
gl(3,5) #三个因子,每个因子重复5次
gl(2, 3, label=c ("Male", "Female"))
gl(2, 2, length=10) #两个因子重复两次 直到长度为10
######向量的下标(index)与向量子集(元素)的提取######
#正的下标 提取向量中对应的元素
#负的下标 去掉向量中对应的元素
#逻辑运算 提取向量中元素的值满足条件的元素
#注:R中向量的下标从1开始,这与通常的统计或数学软件一致.而 象C语言等计算机高级语言的向量下标则从0开始.
#例子:
x <- c(42, 7, 64, 9)
x[1] #提取第一个元素
x[-2] #删除第2个元素
x[c(2,4)] #提取第2和4个元素¥¥¥¥!!!!!!
x > 10 #值大于10的元素逻辑值 逻辑运算
x[x>10] #值大于10的元素 命题为真 就提取出来
x[x<40&x>10]
y <- runif(100, min=0, max=1)#产生(0,1)上100个服从均匀分布的随机数
sum(y<0.5) #值小于0.5的元素的个数
length(y[y<0.5]) #等价于上面
sum(y[y<0.5]) #值小于0.5的元素的值的和
sd(y[y<0.5]) #值小于0.5的元素构成的样本的标准差
#()是用来做函数运算的,[]是用来提取的
###重要的数据结构###
#矩阵
#矩阵的建立
v <- 1:6
m <- matrix(v, 2, 3) #默认按列加载
m <- matrix(v, 2, 3,byrow=T)#改为T就可以按行加载
dim(m) #[ps 向量用length()]
rownames(m)<- c ("Male", "Female")
colnames(m)<- c("low", "middle", "high")
dimnames(m)#查看矩阵的行名和列名
x <- diag(3)#生成单位阵
diag(m) #以m的对角元构成的对角阵
diag(v) #将v中元素作为对角元构成对角阵
m
#矩阵的下标(index)与子集(元素)的提取
#规则:同向量的下标
#例子:
z <- matrix(1:12, 3, 4)
z
z[2,4] #第二行第四列
z[1:2, c(2,4)]#第一行和第二行的第二列和第四列
z[3, ] #提取第三行
z[ ,2] #提取第二列
z[ ,-c(1,3)] #删除第一列和第三列
z[ ,4] <- NA #将第四列换成缺失值$$$$$$$$
z[is.na(z)] <- 1 #将缺失值用1代替
z
###矩阵的运算###*********************
##代数运算
#转置t()
x <- matrix(1:6, 2, 3)
x
t(x)
#几个矩阵合并
y <- matrix(1:4, 2, 2)
y
cbind(x, y) #按列合并,要求行数相同
z <- matrix(-1:(-6), 2, 3, by=T)
z
rbind(x, z) #按行合并,要求列数相同
###矩阵乘法###
#矩阵相乘
x * z #两同维数矩阵对应元素相乘
x %*% t(z) #两矩阵代数乘积
tcrossprod(x, z) #等价于上面
crossprod(x, z) # = t(x) %*% z
kronecker(x, z) #kronecker 乘积
#矩阵的特征值分解
ev <- eigen(y)
ev #返回值是一个含有 values 和
#vectors两个分量的列表
ev$values #取出特征值(lambda1, lamda2,…,)
ev$vectors #取出相应的特征向量(v1, v2,…,)
#矩阵的Cholesky分解 A = P’P, 其中P为上三角矩阵
A <- diag(4)+1
P <- chol(A)
P
t(P) %*% P
#矩阵的奇异值分解 A = UDV’, 其中U’U=V’V=I, D是对角阵
A.svd <- svd(A)
#返回值是一个含有 d, u, v 三个分量的列表
A.svd$u %*% diag(A.svd$d) %*% t(A.svd$v)
t(A.svd$u) %*% A.svd$u
t(A.svd$v) %*% A.svd$v
#行列式|A|
det(A)
#矩阵的求逆 Ax=b
b <- -1:2
x <- solve(A, b)
A %*% x
invA <- solve(A) #A的逆矩阵
A %*% invA
#矩阵的拉直
as.vector(A)
#*****************************************#
#*****************************************#
###矩阵的统计运算###
#统计运算
#求均值,中位数等
m <- matrix(rnorm(12), nrow=3) #生成个数为12的标注正态分布的随机数
m
apply(m, MARGIN=1, FUN=mean) #求各行的均值 margin表示边缘
apply(m, MARGIN=2, FUN=median) #求各列的中位数
#按列中心化,标准化
m.cen <- scale(m, center=T, scale=F) #按列中心化
apply(m.cen, MARGIN=2, FUN=mean)
m.stand <- scale(m, center=T, scale=T) #按列标准化
apply(m.stand, MARGIN=2, FUN=mean)
apply(m.stand, MARGIN=2, FUN=sd)
#减去中位数
row.med <- apply(m, MARGIN=1, FUN=median)
sweep(m, MARGIN=1, STATS=row.med, FUN="-“)