R程序包
在CRAN 提供了每个包的源代码和编译好的程序包
以vegan包为例,CRAN提供了:
Package source: vegan_1.17-2.tar.gz
MacOS X binary: vegan_1.17-2.tgz
Windows binary: vegan_1.17-2.zip
Reference manual: vegan.pdf
Window下程序包为zip文件,安装时不要解压缩
安装程序包的方法
1 用函数 install.packages(),
如果已经连接到互联网,在括号中输入要安装的程序包名称,选择镜像后,程序将自动下载并安装程序包。
例如: 要安装picante包,在控制台中输入
install.packages("picante") #R将自动下载并安装Rcmdr所需的所有程序包
2 安装本地zip包
路径:Packages>install packages from local files
选择本地磁盘上存储zip包的文件夹
3 此导入程序包的方法:
程序包中的函数,都要先导入,再使用
例如:
library(vegan)
library(ade4)
4 查看函数的帮助文件
函数的默认值是什么? 怎么使用? 使用时需要注意什么问题? 需要查询函数的帮助。
1 ?t.test
2 RGui>Help>Html help
3 apropos("t.test")
4 help("t.test")
5 help.search("t.test")
6 查看R包pdf手册
帮助文件的内容
•lm{stats} #函数名及所在包
•Fitting Linear Models #标题
•Description #函数描述
•Usage #默认选项
•Arguments #参数
•Details #详情
•Author(s) #作者
•References #参考文献
•Examples #举例
遍历数组
(k in 1:n, n 为正整数)。
5 R语言基本数据类型
元素的类型
数值型 Numeric 如 100, 0, -4.335
字符型 Character 如 “China”
逻辑型 Logical 如TRUE, FALSE
因子型 Factor 表示不同类别
复数型 Complex 如:2 + 3i
对象的类(class)
向量(vector) 一系列元素的组合。
如 c(1,2,3); c("a","a","b","b","c")
因子(factor) 因子是一个分类变量
c("a","a","b","b","c")
矩阵(matrix) 二维的数据表,是数组的一个特例
x <- 1:12 ; dim(x) <- c(3,4)
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
数组(array)
数组是k维的数据表(k in 1:n, n 为正整数)。
向量(n = 1) 矩阵(n = 2) 高维数组(n >= 3)
数据框(dataframe)
是由一个或几个向量和(或)因子构成,它们必须是等长的,但可以是不同的数据类型。
•两种办法生成数据框:
•(1)从外部数据读取
•(2)各类型因子组合成数据框
列表(list)
列表可以包含任何类型的对象。
可以包含向量、矩阵、高维数组,也可以包含列表
向量的创建:四种类型的向量
#向量的创建
#生成向量的函数 c(),rep(),seq(),”:”
c(2,5,6,9)
rep(2,times=4)
seq(from=3, to=21, by=3 )
#字符型的创建
character<-c("China", "Korea", "Japan", "UK", "USA", "France", "India", "Russia")
#数值型的创建
numeric<-c(1, 3, 6, 7, 3, 8, 6, 4)
#逻辑型的创建
logical<-c(T, F, T, F, T, F, F, T)
复数型 略
向量创建——产生随机数(相关函数)
runif(10, min = 0, max= 1)
rnorm(10, mean = 0, sd = 1)
几个随机数的相关函数
概率密度
dunif(x, min=0, max=1, log = FALSE)
累积函数
punif(q, min=0, max=1, …)
分位数
qunif(p, min=0, max=1, …)
随机均匀分布
runif(n, min=0, max=1)
创建矩阵
#创建一3行4列的矩阵
#方法一
x <- 1:12
dim(x) <- c(3,4)
#方法二
matrix.x <- matrix(1:12,nrow=3,byrow=T) #matrix默认按列填充。增加参数byrow=T,按行填充
t(x)#转置
为行或列添加名称:row.names() col.names()
数据框的创建
#创建数据框的函数:data.frame(), as.data.frame(), cbind(), rbind()
cbind() # 按列组合成数据框
rbind() # 按行组合成数据框
data.frame() #生成数据框
head() #默认访问数据的前6行
创建列表
x <- list(id=1:4, height=170, gender="male")
x["id"]
x[[1]] #x[1]:是一个链表(list) x[[1]] :是一个数
x[["id"]]
x$id
x[c(1,3)]
#假设list1 list2是两个list。可以用c()合并list
list <- c(list1, list2);
#可以通过unlist()把列表中的所有元素转换为向量元素,转换后的向量元素的个数和列表中所有数据对象的个数相同。该操作将把列表中不同类型的数据转为统一的类型,这意味着大多数情况下把所有列表数据转换为字符型。
unlist(list)
引用
向量内的元素引用
### Dalgaard书中的例子
intake.pre <- c(5260, 5470, 5640, 6180, 6390, 6515, 6805, 7515, 7515, 8230, 8770)
intake.post <- c(3910, 4220, 3885, 5160, 5645, 4680, 5265, 5975, 6790, 6900, 7335)
intake.pre[5]; #引用第5个元素
intake.pre[c(3,5,7)] #引用第3,5,7个元素
v <- c(3,5,7); intake.pre[v];
intake.pre[1:5]; #引用第1到5个元素
intake.pre[-c(3,5,7)] #去除第3,5,7元素
数据框内元素的引用
intake <- data.frame(intake.pre, intake.post)
引用数据框中的元素
(1) $ 引用列,后面为列的名称
例如 intake$intake.pre
(2) [,]方括号引用,逗号前为行,逗号后为列
intake[,1]; 引用第1列
intake[5,]; 引用第5行
intake[5,1]; 引用第1列,第5行
i = 1:5; intake[i,] 引用1到5行
数据框内元素的操作
attach()
#假设data.frame包含列name,age
#attach(onedata.frame)后就可以引用直接引用onedata.frame中的元素了,例如:
函数attach()的反向操作是detach(),他禁止直接访问数据框的列
查询数据框的行,列数
nrow(data.frame) #返回数据框的行总数
ncol(data.frame) #返回数据框的列总数
#编辑数据框edit()函数,会弹出可视化的编辑框,然后进行数据的编辑操作
#编辑已经存在的数据框
new.frame <- edit(oldFrame)
#编辑已经新的数据框
nev.data <- edit(data.frame)
names(my.dataset) <- c("name1", "name2", "name3") #重新命名数据框的列名
#获得R自带的数据集
data()
#通过以下命令应用已有的数据集
data(CO2) #数据框名CO2,然后就可以操作数据框CO2中的数据
列表内元素的引用
列表内元素的引用可以用”[[]]”
如 list1[[c(1,2,3)]]
上述放于”[]”内的数字,称为下标
排 序
#将向量中的元素按照一定顺序排列,order() 默认给出从小到大的出现序号。
sort() 按数值大小排序
6 外部数据读取
最为常用的数据读取方式是用read.table() 函数或read.csv()函数读取外部txt或csv格式的文件。
txt文件,制表符间隔
csv文件,逗号间隔
一些R程序包(如foreign)也提供了直接读取Excel, SAS, dbf, Matlab, spss, systat, Minitab文件的函数。
read的使用
#例:
1:test.data<-read.csv("D:/R/test2.csv",header=T)
# header=T表示将数据的第一行作为标题。
2:read.table(file=file.choose(),header=T) #可以弹出对话框,选择文件
data1<-read.table("d:/t.test.data.txt",header=T)
7 #t检验
#检验体重除以身高的平方是否等于22.5
height<-c(1.75, 1.80, 1.65, 1.90, 1.74, 1.91)
weight<-c(60, 72, 57, 90, 95, 72)
sq.height<-height^2
ratio<-weight/sq.height
t.test(ratio, mu=22.5)
8 类的判断
对象类型判断
mode() 判断存储的类型
class() 判断数据的类
根据数据的类,采用相应的处理方法。
以下函数,主要用在函数处理异常时使用,目的是增强程序的稳健性。
is.numeric() #返回值为TRUE或FALSE
is.logical() #是否为逻辑值
is.charactor() #是否为字符串
is.null() #是否为空
is.na() #是否为na
类的转换
as.numeric() #转换为数值型
as.logical() #转换为逻辑型
as.charactor() #转换为字符串
as.matrix() #转换为矩阵
as.data.frame() #转换为数据框
as.factor() #转换为因子
10 工作空间image
R的所有对象都在计算机内存的工作空间中。
ls() 列出工作空间中的对象
rm() 删除工作空间中的对象
rm(list=ls()) 删除空间中所有对象
save.image() 保存工作镜像
sink() 将运行结果保存到指定文件中
getwd() 显示当前工作文件夹
setwd() 设定工作文件夹
可将结果保存在image中,形式为.Rdata文件,里面保存了R当前工作空间中的各种对象,包括函数。
#设置R的工作路径
#将R工作的路径设置为 d:/data/
setwd("d:/data")
save.image("example.Rdata")
load("example.Rdata")
11 运行脚本 三种运行方式
1 通过source()函数运行
source("d:/regression.r")
2 通过R脚本编辑器运行
路径:RGui>File>Open Script #Ctrl+R运行
3 直接粘贴到R控制台
ctrl+c, ctrl+v
第三种最为简单直接
补充函数
attach()
#假设data.frame包含列name,age
#attach(onedata.frame)后就可以引用直接引用onedata.frame中的元素了,例如:
在函数内部,对数据进行相应调整
with() #with函数内部形成一个空间,在这个空间中,函数可以对列访问。
within()
transform() #数据的转换,如取log
subset() #取数据的子集
apply() #对数据表或矩阵应用某个函数,可减少循环
12 编写函数
#R可以灵活的编写程序,用户自己编写的程序可以直接调用。编程时无需声明变量的类型,这与C,C++等语言不同。
#基本格式
函数名 <- function(数据,参数1= 默认值,…)
{
异常处理;
表达式(循环/判别);
return(返回值);
}
函数内部也可用#添加注释
返回值
•返回值表示函数输出的结果。
•返回值必须是一个对象。
•R默认将最后一行作为返回值。
•如果函数的结果需要有多个返回值,可以创建一个list(),并返回该对象。
•也可以用return()函数,设定返回值。
•但是一个函数的返回的对象只有一个。
异常处理
#•如数据输入不能满足要求,或者参数设定错误等等,可能造成函数给出错误的结果,则需要对函数的运行过程发出警告或终止,以提高程序的稳健性。
#•警告的写法
if(any(is.na(inputdata)))
inputdata <- na.omit(inputdata)
cat(“NAs are found in the input data, and has been removed.\n")
•终止的写法
if(any(is.na(xx)))
stop("NAs are not allowed!\n")
程序流程控制 if
if(条件) 表达式
if(条件) 表达式1 else 表达式2
#举例
p = 0.03
{
if(p<=0.05)
print("p <= 0.05!")
else
print("p > 0.05!")
}
循环 for, while
for(变量 in 向量) 表达式
#用法:
for(i in 1:10) print(i)
while(条件) 表达式
#用法:
i <- 1
while(i<10)
{
print(i)
i <- i + 1
}
函数举例
#问题:输入直角三角形的两个边长,求其斜边长。
#定义函数:
rcal <- function(x,y)
{
z <- x^2 + y^2
result <- sqrt(z)
return(result)
}
#调用函数:
rcal(3,4)
13 数据保存
write.table()
write.csv()
save.image()
sink()
unlink()
#若有LaTeX基础,可以用
Sweave() 函数
#该函数能将脚本、程序说明和运算结果直接保存成.tex文件,用LaTeX编译成pdf文件。
14 附录
推荐的教材
•Crawley Statistics an introduction using R
•Peter Dalgaard Introductory statistics with R
•E. Paradis R for Beginners
•Verzani SimpleR.
•D G Rossiter Introduction to the R Project for Statistical Computing for use at ITC
•J. Maindonald Using R for data analysis and graphics introduction code and commentary using R
•Venables, W. N. & Ripley, B. D. Modern Applied Statistics with S
R网络资源
R主页: http://www.r-project.org
R资源列表 NCEAS http://www.nceas.ucsb.edu/scicomp/software/r
R Graphical Manual http://bm2.genes.nig.ac.jp/RGM2/index.php
统计之都: http://cos.name/
QuikR http://www.statmethods.net/
丁国徽的R文档: http://www.biosino.org/R/R-doc/
R语言中文论坛 http://rbbs.biosino.org/Rbbs/forums/list.page
R语言画图函数见:https://blog.csdn.net/LiuHuan_study/article/details/85547943