一、数据创建
1.expand.grid()
提供的向量或因子所有组合构成的数据框
expand.grid(h=c(60,80), w=c(100, 300), sex=c("Male", "Female"))
第一列就是括号内第一项数(字符)依次循环
第二列就是括号内第二项的数(字符)每个重复第一项数的个数之后循环
第三列就是括号内弟三项的数(字符)每个重复第一项数(字符)的个数乘以第二项的个数之后再循环
2.t()
行列转换
> a=matrix(1:30, 5,6)
> a
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 6 11 16 21 26
[2,] 2 7 12 17 22 27
[3,] 3 8 13 18 23 28
[4,] 4 9 14 19 24 29
[5,] 5 10 15 20 25 30
> ta=t(a)
> ta
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 6 7 8 9 10
[3,] 11 12 13 14 15
[4,] 16 17 18 19 20
[5,] 21 22 23 24 25
[6,] 26 27 28 29 30
二、绘图
1.hist(x)
x的频数直方图
x = rowSums(expand.grid(1:6, 1:6))
hist(x, breaks = seq(min(x) - 0.5, max(x) + 0.5, 1), main = "Number")
#main = paste("Histogram of" , xname)
2.plot()
plot(x,y,xlim=c(0,100),ylim=c(0.4,1),type="o",lwd=2,col=2,pch=24,cex=1.5, yaxs="i",xaxs="i",xlab="Sample Ration(%)",ylab="Accuracy")
(1)x,y : 要画图的x轴内容和y轴内容
(2)xlim,ylim: x轴和y轴的范围
(3)type: 表示图的形状,是点、线、点线、阶梯线等等
(4)lwd: 线的宽度
(5)col: 颜色
(6)pch: 点的形状
(7)cex: 点的大小
(8)yaxs,xaxa: plot默认画图时会在预留一部分坐标空间,设置为“i”后,就可以去掉预留空间
(9) xlab,ylab:x轴和y轴的名称
3.lines()
lines(x,y,col="blue",type="o",lwd = 2,pch=5)
#
1.lines()函数做的是一般连线图,其输入是x,y的点向量,其功能相当于plot(x,y,type="1")。plot()函数被调用时即创建一副新图,而lines()函数是在已存在的图形上添加信息,并不能自己生成图形。
4.grid()
对图添加栅格
grid(nx=NA,ny=6,lwd=2)
#
1.nx,ny:分别表示x和y方向的虚线,当值为NA时,不对相应的方向分割,ny=6 表示将y轴等距分割为6段
5.abline()
添加一条直线
abline(h=0.85,col="black",lty=1,lwd=2)
h: y轴方向的高度
v: x轴的位置
#
1.abline()函数做的是回归线,其输入是回归模型对象。
(1)abline(a,b) 表示画一条y=a+bx的直线
(2)abline(h=y) 表示画出一条水平直线
(3)abline(v=x) 表示画出一条竖直直线
(4)abline(lm.obj) 表示绘出线性模型得到的线性方程
6.legend
添加图例
legend("bottomright",legend=c("AC正确率","MI归一化互信息"),col=c("blue","red"),pch=c(5,24),lty=1)
#
1.
bottomright:图例的位置
legend: 内容
lty: 线的类型
7.matplot()
矩阵图。矩阵图的名称来自于其参数类型,它可以针对一个矩阵将所有列以曲线的形式表达出来。
matplot(x, y, type = “p”, lty = 1:5,
lwd = 1, lend = par(“lend”), pch = NULL, col = 1:6,
cex = NULL, bg = NA, xlab = NULL, ylab = NULL,
xlim = NULL, ylim = NULL, …, add = FALSE,
verbose = getOption(“verbose”))
参数x和y为输入的矩阵,做图的方式是用x的列为横轴方向的变量,y的列为纵轴方向的变量,然后用这些列依次作散点图(x的第一列对y的第一列,x的第二列对y的第二列,依次类推);如果这两个参数有一个缺失,那么x将被1:nrow(y)代替,y被非缺失
的参数矩阵代替;注意两个矩阵要么有一个列数为1,要么列数相等,否则会报错;后面设置颜色、线型等样式的参数type、lty、lwd、pch、col、cex、bg
8.matlines()矩阵线
matlines(x, y, type = “l”, lty = 1:5, lwd = 1, pch = NULL,
col = 1:6, …)
三、分布
1.set.seed()
该命令的作用是设定生成随机数的种子,种子是为了让结果具有重复性。如果不设定种子,生成的随机数无法重现。
> x<-rnorm(10) #随机生成10个随机数
> x
[1] 0.3897943 -1.2080762 -0.3636760 -1.6266727 -0.2564784 1.1017795 0.7557815
[8] -0.2382336 0.9874447 0.7413901
> x<-rnorm(10) #再次随机生成10个随机数
> x
[1] 0.08934727 -0.95494386 -0.19515038 0.92552126 0.48297852 -0.59631064 -2.18528684
[8] -0.67486594 -2.11906119 -1.26519802
> set.seed(5) #设定种子
> x<-rnorm(10) # 在设定种子的前提下生成10个随机数
> x
[1] -0.84085548 1.38435934 -1.25549186 0.07014277 1.71144087 -0.60290798 -0.47216639
[8] -0.63537131 -0.28577363 0.13810822
> set.seed(5) # 设定种子
> y<-rnorm(10)
> y
[1] -0.84085548 1.38435934 -1.25549186 0.07014277 1.71144087 -0.60290798 -0.47216639
[8] -0.63537131 -0.28577363 0.13810822
> x == y
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
从上面的例子可以发现,前两次生成的10个随机数都不一样。后两次在设定了相同的种子前提下,生成的随机数是相同的。
2.predict()
基本语法
predict(object, newdata)
object是已使用lm()函数创建的公式。
newdata是包含预测变量的新值的向量。
3.常用的连续分布函数
#若是人的身高是均值为70英寸,标准偏差为3英寸的正态分布随机变量,请计算一个人不高于65英寸的概率,即计算P(X<=65)的概率,X~N(70,3)
> pnorm(65, mean=70, sd=3)
[1] 0.04779035
分布函数:P(X<=x)
正态分布 pnorm(x, mean, sd)
学生t分布 pt(x, df)
指数分布 pexp(x, rate)
卡方分布 pchisq(x, df)
四、帮助和基础
1.attach(x)
将x指向R的搜索路径;x可以是一个列表、数据库,或者是由save创建的R data file.使用search()来显示搜索路径。
三个函数均是为了简化代码量存在,举个简单的例子,一年级有三个小明,分别在不同的班级,但在attach(一班)和detach(一班)之间的所有代码提到小明都是一班的小明,这样不用每次写到小明的时候都得一班 小明,二班 小明。但他们的缺点就是在attach()和detach()之外还有一个叫小明的,R语言就不知道哪个小明是哪个。
同样的with()函数,所有的代码就只在括号内起作用,出了括号就不认人了;例如with(一班{小明})。他的缺点也很突出,如果来了一个新同学叫小红,则再with内,“小红<-新同学”,出了with就不知道小红是谁了。但“小红<<-新同学”这种赋值方法是可以在with外部生效的。
注:双箭头(<<-)表示给上一层环境中的变量赋值
id <- c(1,2,3)
name <- c("Jack","Tom","Mark")
age <- c(22,30,27)
mydata <- data.frame(id,age,name)
mydata
> mydata
id age name
1 1 22 Jack
2 2 30 Tom
3 3 27 Mark
这里呢,变量mydata里面包含的是一个表格,若是想调用其中的数据该怎么办呢?
1.1 用“$”符号
> mydata$age
[1] 22 30 27
> mydata$age[3]
[1] 27
1.2 用attach()命令
> attach(mydata)
The following objects are masked _by_ .GlobalEnv:
age, id, name
> age
[1] 22 30 27
> age[3]
[1] 27
1.3 利用with()函数
> with(mydata,{age})
[1] 22 30 27
#with()函数适用于当同名变量出现多次,避免程序定位错误的情况;但with也有个弊端,就是只在括号内部有效,在with()的括号内外,信息是完全隔绝的,所以当然不能够用with调用程序其他位置的变量
2.detach(x)
attach(x)的逆运算
3.str(a)
str()是structure(结构)的缩写,它能对任何R数据结构提供简洁明了的描述。
五、模型拟合
1.fitdistr
需要用到MASS包
> library(MASS)
> fitdistr(dat, densfun = "weibull", lower = 0)
shape scale
0.60543339 155.13116924
(0.06472455) (50.00658912)
#第一行没有括号的数字是所拟合的参数
2.coef()
coef是一个通用的函数提取返回的对象建模功能模型系数。
六、检验
1.survreg()
适合参数生存回归模型
survreg(formula, data, dist, subset)
参数解释:
formula形如Y~X1+X2+X3,但注意生存分析中的应变量Y通常为Surv()函数处理的生存时间;data是数据在R中的名字,subset可以对数据进行筛选。
dist为因变量的分布,包括weibull(weibull分布)、exponential(指数分布)、gaussian(伽马分布)、logistic(logistic分布)、loglogistic(对数logistic分布)和lognormal(对数正态分布)。
ovarian
head(ovarian)
fittest=survreg(Surv(futime,fustat)~ecog.ps+rx,ovarian,dist="exponential")
summary(fittest)
Call:
survreg(formula = Surv(futime, fustat) ~ ecog.ps + rx, data = ovarian,
dist = "exponential")
Value Std. Error z p
(Intercept) 6.962 1.322 5.267 1.39e-07
ecog.ps -0.433 0.587 -0.738 4.61e-01
rx 0.582 0.587 0.991 3.22e-01
Scale fixed at 1
Exponential distribution
Loglik(model)= -97.2 Loglik(intercept only)= -98
Chisq= 1.67 on 2 degrees of freedom, p= 0.43
Number of Newton-Raphson Iterations: 4
n= 26
#分析:p=0.43>0.05因此两条生存曲线分布无显著性差异
七、高级数据处理
1.expression()
expression函数可以有一个或多个参数,它把全部参数当成一个列表,每个参数都被转成一个表达式向量,所以它的返回值是表达式列表,每个元素都是表达式类型对象,返回值的长度等于参数的个数
R绘图函数对表达式中包含的函数名和它们的参数首先应用Tex文本格式化规则进行处理,这种规则的具体情况可以使用 ?plotmath 进行查看,主要是一些数学公式和符号的表示方法
main=expression(paste("Weibull-Fit ", hat(S)(t), " mit SE"))
#plot函数中的标题
八、数学
1.集合运算
#首先对集合A,B,C赋值
> A<-1:10
> B<-seq(5,15,2)
> C<-1:5
#求A和B的并集
> union(A,B)
[1] 1 2 3 4 5 6 7 8 9 10 11 13 15
#求A和B的交集
> intersect(A,B)
[1] 5 7 9
#求A-B
> setdiff(A,B)
[1] 1 2 3 4 6 8 10
#求B-A
> setdiff(B,A)
[1] 11 13 15
#检验集合A,B是否相同
> setequal(A,B)
[1] FALSE
#检验元素12是否属于集合C
> is.element(12,C)
[1] FALSE
#检验集合A是否包含C
> all(C%in%A)
[1] TRUE
> all(C%in%B)
[1] FALSE
九、编程
1.ifelse
向量化的函数
> x <- 1:10
> y <- ifelse(x>5, 0, 10)
> y
[1] 10 10 10 10 10 0 0 0 0 0
#处理缺失值
> x <- c(1, 2, NA, NA, 5)
> x
[1] 1 2 NA NA 5
> x <- ifelse(is.na(x), 0, x)
> x
[1] 1 2 0 0 5