R语言实战(一)介绍、数据集与图形初阶
本文对应《R语言实战》前3章,因为里面大部分内容已经比较熟悉,所以在这里只是起一个索引的作用。
第1章 R语言介绍
获取帮助函数
help(), ? |
查看函数帮助 |
example() |
使用函数示例 |
vignette() |
列出vignette文档 |
vignette(“svmdoc”) |
打开对应文档 |
管理工作空间
getwd() |
显示当前工作目录 |
setwd(“mydirectory”) |
修改当前工作目录为mydirectory |
rm(objectlist) |
删除对象 |
save.image(file = “myfile”) |
保存工作空间到myfile.RData |
save(objectlist, file = “myfile”) |
保存指定对象到myfile.RData |
load(file = “myfile”) |
读取一个工作空间到当前会话中(.RData) |
输入与输出
source(“filename”) |
在当前会话中执行R脚本 |
sink(“filename”, append = F, split = F) |
输出文本。append = T追加内容而不是覆盖文件,split = T将结果同时发送到屏幕和文件 |
pdf(“filename.pdf”) |
PDF文件(以下都是图形输出方式) |
win.metafile(“filename.wmf”) |
Windows图元文件 |
png(“filename.png”) |
PNG文件 |
jpeg(“filename.jpg”) |
JPEG文件 |
bmp(“filename.bmp”) |
BMP文件 |
postscript(“filename.ps”) |
PostScript文件 |
第2章 创建数据集
数据结构:标量、向量、矩阵、数组、数据框、列表
标量与向量:
标量只含一个元素,向量为多个相同模式的标量组成的一维数组,使用c()进行组合
矩阵:
相同模式元素的二维数组,通过matrix()创建
数组:
维度可以大于2,元素模式相同,通过array()创建
数据框:
不同的列可以包含不同模式的数据
选取数据框中的特定变量
patientdata$status
简化方式:attach(), detach()或单独使用with()
示例:
#简化前 summary(mtcars$mpg) plot(mtcars$mpg, mtcars$disp) plot(mtcars$mpg, mtcars$wt) #简化后 attach(mtcars) summary(mpg) plot(mpg, disp) plot(mpg, wt) detach(mtcars)
局限性:存在名称相同的对象时,有可能出现masked的警告,原始对象为优先
with()函数示例
#with()用法 with(mtcars, { summary(mpg) plot(mpg, disp) plot(mpg, wt) })
这种方式,赋值仅为with()内的局部变量,要使内部赋值在接下来的代码中可以用,需要使用特殊赋值符( <<- )保存到全局变量中。
#nokeepstats只在with()内可以使用,keepstats可以在全局使用 with(mtcars, { nokeepstats <- summary(mpg) keepstats <<- summary(mpg) })
选取数据框中特定实例:实例标识符
#指定标识符,用于标记各类打印输出和图形中实例名称 patientdata <- data.frame(patientID, age, diabetes, status, row.names = patientID)
因子:
分为类别变量和有序类别变量。
#有序类别变量,默认排序规则为字母顺序 status <- c(“Poor”, “Improved”, “Excellent”, “Poor”) status <- factor(status, ordered = TRUE) #编码为1 = Excellent, 2 = Improved, 3 = Poor
#自定义顺序 status <- factor(status, order = TRUE, levels = c(“Poor”, “Improved”, “Excellent”))
列表:
#创建列表 mylist <- list(object1, object2, …) mylist <- list(name1 = object1, name2 = object2, …) #提取元素 mylist[[1]] mylist[[“name1”]] mylist$name1
导入数据
#带分隔符的文件 mydataframe <- read.table(file, header = FALSE, sep = “”, row.names = “name”) #默认stringAsFactors = TRUE一般需要修改 #colClasses为每一列数据指定class #更多设置信息参考帮助文档
#Excel数据 library(RODBC) channel <- odbcConnectExcel(“myfile.xls”) mydataframe <- sqlFetch(channel, “mysheet”) odbcClose(channel) library(xlsx) workbook <- “c:/myworkbook.xlsx” mydataframe <- read.xlsx(workbook, 1) #XML数据 library(XML) #网页抓取数据 ?readLines ?grep ?gsub library(XML) library(RCurl) #SPSS数据 library(foreign) ?read.spss library(Hmisc) ?spss.get #SAS数据 #旧版SAS使用与SPSS数据类似方法 #新版SAS可以先将数据存为.csv文件再导入 #Stata数据 library(foreign) ?read.dta #netCDF数据 library(ncdf) nc <- nc_open(“mynetCDFfile”) myarray <- get.var.ncdf(nc, myvar) #HDF5数据 library(hdf5) #访问数据库管理系统 #ODBC接口 library(RODBC) myconn <- odbcConnect(“mydsn”, uid = “Rob”, pwd = “password”) crimedat <- sqlFetch(myconn, Crime) pundit <- sqlQuery(myconn, “select * from Punishment”) close(myconn) #DBI相关包 library(DBI) library(RJDBC) library(RMy) library(ROracle) library(RPostgreSQL) library(RSQLite)
ODBC包主要函数
odbcConnect(dsn, uid = “”, pwd = “”) |
建立一个ODBC连接 |
sqlFetch(channel, sqltable) |
读取表 |
sqlQuery(channel, query) |
向ODBC数据库提交查询并返回结果 |
sqlSave(channel, mydf, tablename = sqtable, append = FALSE) |
将数据库写入或更新(append = TRUE)到ODBC数据库中的某个表中 |
sqlDrop(channel, sqtable) |
删除ODBC数据库中的某个表 |
close(channel) |
关闭连接 |
处理数据对象的实用函数
length(object) |
显示对象中元素/成分的数量 |
dim(object) |
显示某个对象的维度 |
str(object) |
显示某个对象的结构 |
class(object) |
显示某个对象的类或类型 |
mode(object) |
显示某个对象的模式 |
names(object) |
显示某对象中各成分的名称 |
c(object1, object2, …) |
将对象合并入一个向量 |
cbind(object1, object2, …) |
按列合并对象 |
rbind(object1, object2, …) |
按行合并对象 |
object |
输出对象 |
head(object) |
列出某个对象的开始部分 |
tail(object) |
列出某个对象的最后部分 |
ls() |
显示当前的对象列表 |
rm(object1, object2, …) |
删除对象 rm(list = ls())可以删除几乎所有对象 |
newobject <- edit(object) |
编辑对象并另存为newobject |
fix(object) |
直接编辑对象 |
第3章 图形初阶
因为总体来讲,作为最终展示的作图,往往使用ggplot2包更好一点。然而在数据分析的过程中,需要首先对数据分布进行一定了解,这就需要一些比较基础的图形。由于本章只是对于图形的创建、保存、颜色、标注等进行解说,因此并不是我们关心的重点,所以我们仅仅将一些通用的方法以索引的方式罗列出来,作为参考。而作为最终展示的图形,在后面的ggplot2包的学习中,将会进行更加详细的阐述。
#图形的输出与保存 pdf(“mygraph.pdf”) plot(x, y) title(“my graph”) dev.off() #图形参数修改 #通过par()函数修改参数,这种方式设定的参数值,在会话结束前一直有效 #生成一个可以修改的当前图形参数列表 opar <- par(no.readonly = TRUE) #设置参数 par(lty = 2, pch = 17) #作图 plot(dose, drugA, type = ‘b’) #还原原始设置 par(opar)
另外也可以直接在绘图函数里设置参数键值对,只对当前图形有效
符号和线条
pch |
绘制的点符号(0:25) |
cex |
绘制点大小(默认1) |
lty |
绘制线形状(1:6) |
lwd |
绘制线宽度(默认1) |
颜色
col |
默认的绘图颜色,若颜色向量小于绘图数量,则循环使用 |
col.axis |
坐标轴刻度文字的颜色 |
col.lab |
坐标轴标签名称的颜色 |
col.main |
标题颜色 |
col.sub |
副标题颜色 |
fg |
前景色 |
bg |
背景色 |
#用于创建连续型颜色向量的函数 rainbow() heat.colors() terrain.colors() topo.colors() #多阶灰度色 gray() #以上函数使用help()查询具体使用参数
文本尺寸、图形尺寸略
添加标题,可以在plot()函数里声明,也可以用title()函数追加:main标题、sub副标题、xlab, ylab坐标轴标签
设置坐标轴范围xlim, ylim
添加坐标轴函数axis(side, at = x)
添加参考线函数abline(h = yvalues, v = xvalues)
添加图例函数legend(location, title, legend, …)
添加文本标注函数text()向绘图区域内部添加,mtext()向图形边界之一添加
数学标注:详见help(plotmath)
图形组合
#方法1 par(mfrow = c(nrows, ncols)) #接下来的几幅图排列在nrows, ncols矩阵中 #方法2 layout(matrix(c(1, 1, 2, 3)), 2, 2, byrow = TRUE) #指在2*2矩阵中,第一幅图占据(1,1)和(1,2)第二幅(2,1)第三幅(2,2) layout(matrix(c(1, 1, 2, 3)), 2, 2, byrow = TRUE, widths = c(3, 1), heights = c(1, 2)) #各列宽度及各行高度组成的向量,即矩阵的四个部分,宽之比3:1高之比1:2
多幅图形的精细控制:
通过par()函数里的fig参数设置多个图形的相对位置,可以多试几次,直到找到最合适的参数。
opar <- par(no.readonly = TRUE) #设置散点图 par(fig = c(0, 0.8, 0, 0.8)) plot(mtcars$wt, mtcars$mpg, xlab = "Miles Per Gallon", ylab = "Car Weight") #在上方和右侧添加箱线图 par(fig = c(0, 0.8, 0.55, 1), new = TRUE) boxplot(mtcars$wt, horizontal = TRUE, axes = FALSE) par(fig = c(0.65, 1, 0, 0.8), new = TRUE) boxplot(mtcars$mpg, axes = FALSE) mtext("Enhanced Scatterplot", side = 3, outer = TRUE, line = -3) par(opar)