篇一:R语言
R的源起
R是S语言的一种实现。S语言是由 AT&T贝尔实验室开发的一种用来进行数据探索、统计分析、作图的解释型语言。最初S语言的实现版本主要是S-PLUS。S-PLUS是一个商业 软件,它基于S语言,并由MathSoft公司的统计科学部进一步完善。后来Auckland大学的Robert Gentleman 和 Ross Ihaka 及其他志愿人员开发了一个R系统。R的使用与S-PLUS有很多类似之处,两个软件有一定的兼容性。
R is free
R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。
R是一套完整的数据处理、计算和制图软件系统。其功能包括:数据存储和处理系统;数组运算工具(其向量、矩阵运算方面功能尤其强大);完整连贯的统计分析工具;优秀的统计制图功能;简便而强大的编程语言:可操纵数据的输入和输入,可实现分支、循环,用户可自定义功能。
R是一个免费的自由软件,它有UNIX、LINUX、MacOS和WINDOWS版本,都是可以免费下载和使用的,在那儿可以下载到R的安装程序、各种外挂程序和文档。在R的安装程序中只包含了8个基础模块,其他外在模块可以通过CRAN获得。
R的特点
(1) 有效的数据处理和保存机制。
(2) 拥有一整套数组和矩阵的操作运算符。
(3) 一系列连贯而又完整的数据分析中间工具。
(4) 图形统计可以对数据直接进行分析和显示,可用于多种图形设备。
(5) 一种相当完善、简洁和高效的程序设计语言。它包括条件语句、循环语句、用户自定义的递归函数以及输入输出接口。
(6) R语言是彻底面向对象的统计编程语言。
(7) R语言和其它编程语言、数据库之间有很好的接口。
(8) R语言是自由软件,可以放心大胆地使用,但其功能却不比任何其它同类软件差。
(9) R语言具有丰富的网上资源
一入门训练
1. 获取帮助
> help.start() 开启帮助文档
>help(solve) 显示某命令的帮助信息,或者
>?solve
对于由特殊字符指定的功能,这些参数必须用单引号或双引号括起来,使之成为一个“字符串”,如
> help("[[")
与某个主题相关的例子通常可以用下面的命令得到
> example(topic)
2. 命令简介
R对大小写是敏感的;名称不能以数字开始;
基本的命令由表达式或者赋值语句组成。如果一个表达式被作为一条命令给出,它将被求值、打印而表达式的值并不被保存。一个赋值语句同样对表达式求值之后把表达式的值传给一个变量,不过并不会自动的被打印出来;
命令由分号(;)来分隔,或者另起新行;
基本命令可以由花括号(f和g)合并为一组复合表达式;
注释几乎可以被放在任何地方,只要是以井号( # )开始,到行末结束;
如果一个命令在行莫仍没有结束,R将会给出一个不同的提示符,默认的是?+?。
3. 命令文件的执行和输出转向到文件
如果命令存储于一个外部文件中,比如工作目录work中的commands.R,他们可以随时在R的任务中被执行
> source("commands.R")在Windows中Source也可以由File菜单执行。 函数sink,
> sink("record.lis")
将把所有后续的输出由终端转向一个外部文件,record.lis。命令
> sink()将把信息重新恢复到终端上。
4. 数据的保持与对象的清除
R所创建、操作的实体是对象。对象可以是变量、数组、字符串、函数以及由这些元素组成的其它结构;
> objects() 用来显示目前存储在R中的对象的名字。而当前存储的所有对象的组合被称为workspace;
清除对象可以使用rm命令:
> rm(x, y, z, ink, junk, temp, foo, bar)
所有在一个R任务中被创建的对象都可以在文件中被永久保存,并在其它的R任务中被使用。在每个R任务结束时用户都有机会保存当前有效的所有对象。如果用户这样做的话,对象将被写入当前目录一个名为.RData。当R被再次启动时R会从这个文件中再载入workspace。同时相关的命令记录也被载入。
所以,推荐大家在用R进行不同的分析时分别使用不同的工作目录。
5. 基本数据结构
6. 基本数据对象
向量(vector), 见下节
矩阵(matrix):
更一般的说数组是向量在多维情况下的一般形式。事实上它们是可以被两个或更多的指标索引的向量,并且以特定的方式被打印出来。
因子(factors) 提供了一种处理分类数据的更简介的方式。
列表(list):
是向量的一种一般形式,并不需要保证其中的元素都是相同的类型,而且其中的元素经常是向量和列表本身。
数据框(data frame):
是一种与矩阵相似的结构,其中的列可以是不同的数据类型。可以把数据框看作一种数据"矩阵",它的每行是一个观测单位,而且(可能)同时包含数值型和分类的变量。
函数( function):
能够在R的workspace中存储的对象。我们可以通过函数来扩展R的功能。
二简单操作,数值与向量
2.1 向量与赋值
R对命名了的数据结构进行操作。最简单的数据结构是数字向量;如,
> x <- c(10.4, 5.6, 3.1, 6.4, 21.7) c()是创建函数,赋值运算符是'<-',与函数assign()等价
> assign("x", c(10.4, 5.6, 3.1, 6.4, 21.7)) 也可以写成:
> c
(10.4, 5.6, 3.1, 6.4, 21.7) -> x
如果一个表达式被当作一个完整的命令,它的值将被打印到终端但不被储存。
单独输入x则会将值打印出来。也可以打印倒数:
> 1/x
> y <- c(x, 0, x)也可以将向量作为元素。
2.2 向量运算
操作是按照向量中的元素一个一个进行的。同一个表达式中的向量并不需要具有相同的长度。如果它们的长度不同,表达式的结果是一个与表达式中最长向量有相同长度的向量。
表达式中较短的向量会根据它的长度被重复使用若干次(不一定是整数次),直到与长度最长的向量相匹配。而常数很明显的将被不断重复。如,
> v <- 2*x + y + 1
常用运算有:
+,-,*,/,^(次方);
log, exp, sin, cos, tan,sqrt等;
max和min的作用是选出所给向量中最大的或最小的元素;
range函数的值是一个长度为2的向量,即c(min(x),max(x))
length(x)返回了向量x中元素的个数,也就是x的长度。
sum(x)给出了x中所有元素的总和;
prod(x)给出x中所有元素的乘积;
mean(x)和var(x),分别计算样本均值和样本方差,这两个函数分别相当于
sum(x)/length(x),sum((x-mean(x)) \^2)/(length(x) -1)。如果var()的参数是一个n*p的矩阵,那么函数的值是一个p*p的样本协方差矩阵,认为每行是一个p变量的样本向量。
sort(x)返回一个与x具有相同长度的向量,其中的元素按招升序排列。还有其他更灵活的排序功能(参见order()和sort.list())。
pmax和pmin将返回一个与最长的向量长度相等的向量,向量中的元素由参数中所有向量在相应位置的最大值(最小值)组成;
如果要使用复数,需要直接给出一个复数部分。因此sqrt(-17)将会返回NaN(无效数值)和一个警告,而sqrt(-17+0i)将按照复数进行运算。
2.3 生成序列
最简单的方法是用冒号?:?,冒号具有最高运算优先级。例如1:30就是向量
c(1,2,. . .,29,30)。30:1构造一个递减序列。
利用seq()函数构造序列:有五个参数,from, to, by, length, along
from, to可以不写参数名,seq(2,10)就相当于2:10。 by指定步长,默认为1,如seq(-5, 5, by=.2)即为c(-5.0, -4.8, -4.6, ..., 4.6, 4.8, 5.0)
length指定序列长度,如seq(length=51, from=-5, by=.2),等同于seq(-5, 5, by=.2)
along=vector只能单独使用,产生一个
“1:length(vector)”序列。类似的函数是rep(),这个函数可以用多种复杂的方法来
复制一个对象。最简单的形式是> s5 <- rep(x, times=5)
2.4 逻辑向量
TRUE, FALSE, 和NA(not available), 前两个可以简写为T和F,但T/F并不是系统保留字,可以被用户覆盖,所以最好还是不要简写。
逻辑向量是由条件给出的,如下列语句令temp成为一个与x长度相同,相应位置根据是否与条件相符而由TRUE或FALSE组成的向量:
> temp <- x > 13
逻辑操作符包括<, <=, >, >=,完全相等==和不等于!=,与或非分别为&, |, !。 在普通运算中,FALSE当做0而TRUE当做1。
2.5 缺失值
NA(not available): 一般来讲一个NA的任何操作都将返回NA。
is.na(x)返回一个与x等长的逻辑向量,并且由相应位置的元素是否是NA来决定这个逻辑向量相应位置的元素是TRUE还是FALSE。
x==NA是一个与x具有相同长度而其所有元素都是NA的向量。
NaN(Not a Number): 由数值运算产生,如0/0, Inf-Inf.
is.na(x)对于NA和NaN值都返回TRUE,
is.nan(x)只对NaN值返回TRUE。
2.6 字符向量
字符串在输入时可以使用单引号(')或双以号("); 在打印时用双引号(有时不用引号)。
R使用与C语言风格基本相同的转义符, 所以输入\\打印的也是\\, 输入\" 打印引号", \n: 换行, \t: tab, \b: 回格。
字符向量可以通过函数c()连接;
paste()可以接受任意个参数,并从它们中逐个取出字符并连成字符串,形成的字符串的个数与参数中最长字符串的长度相同。如果参数中包含数字的话,数字将被强制转化为字符串。在默认情况下,参数中的各字符串是被一个空格分隔的,不过通过参数sep=string 用户可以把它更改为其他字符串,包括空字符串。例如:
> labs <- paste(c("X","Y"), 1:10, sep="") 使变量labs成为字符变量c("X1", "Y2", "X3", "Y4", "X5", "Y6", "X7", "Y8", "X9", "Y10")
2.7 index vector---数据集子集的选择与修改
任何结果为一个向量的表达式都可以通过追加索引向量(index vector)来选择其中的子集。
1 逻辑的向量。
> y <- x[!is.na(x)] 表示将向量x中的非NA元素赋给y;
> (x+1)[(!is.na(x)) & x>0] -> z 表示创建一个对象z,其中的元素由向量x+1中
篇二:R语言绘图
R语言绘图
画图例子 R Graph Cookbook例子 [html] view plain copy print ? span style = font-size:18px; / span [html] view plain copy print ? span style = font-size:18px; From: / span a href = /retype/zoom/db7b3d1f8e9951e79b892774?pn=1&x=0&y=14&raww=480&rawh=480&o=png_6_0_0_135_774_337_337_892.979_1262.879&type=pic&aimh=480&md5sum=247dbf2a328f5e26e227fa6e8f6d9bdf&sign=9d1f00d8d9&zoom=&png=0-3504&jpg=0-0" target="_blank">点此查看
还是直接上代码吧,我已经做好注释的了。
[python] view plaincopyprint?
1. <span style="font-size:18px;">plot(cars$dist~cars$speed,#y~x,cars是R自带的数据
2. main="Relationship between car distance & speed",#标题
3. xlab = "Speed(miles per hour)",#x轴标题
4. ylab = "Distance travelled (miles)",#Y轴标题
5. xlim = c(0,30),#设置x轴的取值区间为0到30
6. ylim = c(0,140),#设置y轴的取值区间为0到140
7. xaxs = "i",#这里是设置x轴的风格,暂时没看明白有多大区别
8. yaxs = "i",
9. col = "red",#设置颜色
10.pch = 19)#pch指代点的形状,用数字表示,可查看帮助文档
11.#如果要保存图片怎么办呢?我觉得最简单的方法就是使用RStudio这个IDE,极其得好,可惜很多人都不知道。#如果你不会,可以用如下代码实现:#(图形的参数还有很多个,我这里只使用了其中的几个)
12.png(filename="散点图.png",width=480,height=480)
13.plot(cars$dist~cars$speed,#y~x
14.main="Relationship between car distance & speed",#标题
15.xlab = "Speed(miles per hour)",#x轴标题
16.ylab = "Distance travelled (miles)",#Y轴标题
17.xlim = c(0,30),#设置x轴的取值区间为0到30
18.ylim = c(0,140),#设置y轴的取值区间为0到140
19.xaxs = "i",#这里是设置x轴的风格,暂时没看明白有多大区别
20.yaxs = "i",
21.col = "red",
22.pch = 19)#pch指代点的形状,用数字表示,可查看帮助文档
23.dev.off()
24.</span>
如果你还有另一组数据,需要在上面这幅图里绘制,也就是在同一幅图里面绘制两组数据的散点图,可以像下面这样用point函数:
[plain] view plaincopyprint?
1. <span style="font-size:18px;">png(filename="散点
图.png",width=480,height=480)
2. plot(cars$dist~cars$speed,#y~x
3. main="Relationship between car distance & speed",#标题
4. xlab = "Speed(miles per hour)",#x轴标题
5. ylab = "Distance travelled (miles)",#Y轴标题
6. xlim = c(0,30),#设置x轴的取值区间为0到30
7. ylim = c(0,140),#设置y轴的取值区间为0到140
8. xaxs = "i",#这里是设置x轴的风格,暂时没看明白有多大区别
9. yaxs = "i",
10.col = "red",
11.pch = 3)#pch指代点的形状,用数字表示,可查看帮助文档
12.points(cars$speed~cars$dist,pch=19)#因为比较难弄数据,就把原先的数据因果关系颠倒一下,pch设置与前面不同以区分
13.dev.off()</span>
如果自己没有数据的话,可以用data()查看R语言内置的数据的哦。还是有挺多数据的。
上面的这些是散点图,但是你只要在参数里面type="l"#是字母l,那么就会将这些点串联起来画成线了。
下面是条形图的绘制方法(bar plot),数据是该书自带的,代码如下:
[plain] view plaincopyprint?
<span style="font-size:18px;">png(filename="散点
图.png",width=480,height=480)
1. Sales <- read.csv("/home/rickey/文档/电子书/R教程
/Learn R statistics/R Graph/Code/Chapter 1/Data Files/citysales.csv",header=TRUE)#header设置为TRUE表示把数据行和列的名称也读取进来
2. barplot(Sales$ProductA,
3. names.arg=Sales$City,
4. col="blue")
5. dev.off()</span>
图形输出(pdf\Win\PBG\JPEG\BMP\PostScript) 用代码保存图形,将绘图语句夹在开启目标图形设备的语句和关闭目标图形设备的语句之间即可。
[python]
1. <span style="font-size:18px;">#pdf("mygraph.pdf")#pdf文件
2. win.metafile("filename.wmf")#windows图形文件
3. #png("filename.png")#PBG文件
4. #jpeg("filename.jpg")#JPEG文件
5. #bmp("filename.bmp")#BMP文件
6. #postscript("filename.ps")#PostScript文件
7. attach(mtcars)
8. plot(wt,mpg)
9. abline(lm(mpg~wt))
10. title("Regression of MPG on Weight")
11. detach(mtcars)
12. dev.off()
13.
</span>
篇三:R语言初学者指南学习摘要
R语言初学者指南
第一章 引言
函数
?
#
boxplot
log
log10
library
setwd
q
citation
功能 访问帮助文件 添加注释 生成盒形图 自然对数 以10为底的对数 载入包 设置工作目录 关闭R 提供对R的引用 ?boxplot #Add your comments here boxplot(y)boxplot(y~factor(x)) log(2) log10(2) library(MASS) setwd(“C:/AnyDirectory”) q() citation() 示例
第二章 R中的数据输入
录入数据,并把数据系统地转化为标量(单值)、向量、矩阵、数据框或列表。 如何从Excel、ascii文件、数据库和其他统计程序中载入数据。
2.1 R中的第1步
2.1.1 小型数据库中的数据录入
#符号“<-”相当于“=”
#变量名中不能出现“%,^,&,*,!,?,+,-,(),[],#,<>”因为这些符号中的大部分都是运算符。
#如果定义好了:
> SQ.wing1<-sqrt(wing1)
若要现实SQ.wing1的值,只需输入:
>SQ.wing1
或者把需要执行的命令放在圆括号内:
> (SQ.wing1<-sqrt(wing1))
2.1.2 应用c函数连接数据
C()函数可以完成一个变量中存储多个值
例如:>Wingcrd <- c(59, 55, 53.5, 55, 52.5, 57.5, 53, 55)
如果查看Wingcrd的第一个值,则需要
> Wingcrd [1]
如果需要查看Wingcrd前五个值,则需要
> Wingcrd [1:5]
如果需要查看Wingcrd除了第二个值以外的其他值,则需要
> Wingcrd [-2]
-负号表示删除了这个值
R有很多的内置函数,最基本的有sum, mean, max, min, median(中位数), var(方差)和sd(标准差)等。
> sum(Wingcrd)
或者存在一个新的变量中,
>S.win <- sum(Wingcrd)
>S.win
输入其他三组数据:
>Tarsus = c(22.3,19.7,20.8,20.3,20.8,21.5,20.6,21.5)
>Head = c(31.2,30.4,30.6,30.3,30.3,30.8,32.5,NA)
>Wt = c(9.5,13.8,14.8,15.2,15.5,15.6,15.7)
R中的变量名最好使用大写字母开头,这样可以避免将它和一些内部函数名混淆。
注意,数据里有一只鸟的头的尺寸是没有测量的,我们用NA表示,这时我们调用内部函数计算就会出现错误。
在向量中有一个缺失值的话,默认选项“na.rm=FALSE”(rm表示移除remove),将会导致R函数返回NA,为了避免此种情况,我们用“na.rm=TRUE”,
> sum(Head, na.rm=TRUE)
我们将接着学习如何连接这4个变量中的数据,(1)c,cbind和rbind函数;(2)matrix和vector函数;(3)数据框;(4)列表。
2.1.3 使用c,cbind和rbind结合变量
Wingcrd翼弦, Tarsus踝骨, Head头, Wt体重,四组数据,每组8个值
c函数可以用来连接这些数据,同时连接这些数据中的8个值:
> BirdData <- c(Wingcrd, Tarsus, Head, Wt)
Data是R中的一个内部函数,因而不能直接用Data.
>Id <- c(1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4)
Id向量的作用是指出具有相似Id值的观察值属于同一种形态变量。
上面的命令过于繁琐,可以这么做:
>Id <- rep(c(1,2,3,4), each=8)
符号rep代表重复(repeat)
还可以以下用法:
> Id <- rep(1:4, each=8)
或
> a <- seq(from=1, to=4, by=1)
> rep(a, each=8)
接着生成一个VarNames的新变量:
> Varnames = c("Wingcrd", "Tarsus", "Head", "Wt")
>Varnames
>Id2= rep(Varnames, each=8)
>Id2
c函数是我们结合数据或者变量的一种选择,另一种选择是cbind函数,它的作用是将所结合的变量以列的形式输出。
如:> Z <- cbind(Wingcrd, Tarsus, Head, Wt)
> Z
当我们有特殊需求时:
1、访问Z的第一列: > Z [,1]
或者 >Z[1:8, 1]
2、访问Z的第二行: >Z[2,] 或者 >Z[2,1:4]
> dim(Z)#表示Z的行数和列数
2.1.4 使用vector函数结合数据
vector函数的作用与c函数类似,它可以用来代替c函数。
2.2 数据的载入
2.2.1 Excel中的数据载入
两种方法:
第一种(常用):
1、将EXCEL中的数据准备好;
2、将其提取到制表符分隔的ascii文件中;
3、关闭EXCEL;
4、使用read.table函数将数据载入到R中。
第二种:
是一个专门的R程序包,RODBC ,它可以访问EXCEL中选定的行和列。
2.2.1.1 EXCEL中的数据准备
样本——变量形式:列表示各种变量,如性别、年龄、成绩等,行表示各种样本、观察值、案例、对象或其他称之为样本单元的东西。
2.2.1.2 数据提取到制表符分隔的ascii文件
步骤:在EXCEL中,“文件”——“另存为”——“保存类型”——选择“文本文件(制表符分隔)”,将EXCEL中的数据提取到一个制表符分隔的ascii文件中,注意存储位置。
(注意,此操作前,必须让EXCEL中的没有特殊的数据,也不可有空内容或者包含空格的名称,不然会出现NA)
2.2.1.3 read.table函数的使用
> Squid <- read.table(file = “C:/RBOOK/squid.txt(存储目录)”, header = TRUE)
数据以数据框的形式存储到Squid,名称尽量简单、明确
而read.table中的header=TRUE,表示第一行包括了标签,如果文件中红没有标签,可以为header=FALSE.
第三章 访问变量和处理数据子集
3.1 访问数据框变量
> setwd(“C:\Users\winner\Desktop\学习札记”) #设置默认存储目录
> Squid <- read.table(file = “C:\Users\winner\Desktop\学习札记\RBOOK.txt”, header = TRUE)
1、用names命令查看正在处理的变量
> names(Squid)
3.1.1 str函数
str命令告诉我们数据框中每个变量的属性
> str (Squid )
read.table和names和str函数结合在一起使用
3.1.2 函数中的数据参数
> M1 <- 1m ( GSI ~ factor(Location) + factor(Year),
data=Squid )
直接用(data= )来告诉R,变量在数据框Squid中。但并不是所有的函数都可以如此做,因为有的函数美元data参数。
3.1.3 $符号
如果一个函数没有data参数,可以用$符号:
> Squid $ GSI
还可以:
> Squid [, 6] #第6列也就是变量GSI那一列
计算均值:两种方法都可以 但建议用第一种
> mean ( Squid$GSI)
3.1.4 attach函数
用attach命令把Squid添加到R的搜索路径里,就可以直接输入变量而不加其他函数,就能看到该变量的值了。
> attach (Squid)
> GSI
> boxplot(GSI)
> mean(GSI)
attach虽然比较好,但是如果有两个具有相同变量名称的数据框,就会发生问题。
1、为了避免复制变量,不要输入attach(Squid)两次;
2、如果你使用attach命令,确保你使用唯一的变量名称,避免使用月份、位置等常见的名称;
3、如果你载入多个数据集,并且一次只处理一个数据集,考虑使用detach命令从R的搜索路径里移除一个数据框。
如: > detach (Squid)
3.2 访问数据子集
如果我只想处理某个位置的雌性数据,为了提取数据子集,我们需要知道性别是如何编码的,可以键入:
> Squid$Sex
结果显示了变量Sex的所有值,可以用unique命令显示这个变量里有多少个唯一值: > unique(Squid(本文来自:WwW.xiaOCaofAnweN.Com 小草范文 网:r语言中进行文件夹操作范例注释)$Sex)
出现1表示雌性,2表示雄性
为了访问所有的雄性数据,使用:
> Se1 <- Squid$Sex==1#生成一个向量Se1与Sex具有相同的长度,且Sex的值为1时的值 > SquidM <- Squid [ Se1, ] #选择Squid中Se1等于TRUE,并把我们选择的数据存储到SquidM > SquidM
上述命令也可以写为:
>Squid <- Squid [Squid$Sex ==1 ,]
>Squid
若Location上的值有1、2、3、4这四个,我们想提取1、2、3的数据,我们可以使用符号|表示或,!=表示不等于。
> Squid123 <- Squid[Squid$Location == 1 |Squid$Location == 2 | Squid$Location == 3 , ] > Squid123 <- Squid[Squid$Location != 4, ]
> Squid123 <- Squid[Squid$Location <= 3 , ]
> Squid123 <- Squid[Squid$Location >=1 &
Squid$Location <= 3, ]
| 表示“或”; &表示“且”; != 表示“不等于”;==为逻辑为/逻辑等于
3.2.1 数据排序
按月份由低到高排列:
> Ord1 <- order(Squid$Month )
> Squid [ Ord1, ]
3.3 使用相同的标识符组合两个数据集
几个不同的数据集,但是每个数据集里都有1个或几个相同的变量,就可以将这几个数据集组合起来。
merge函数
> setwd( “C:/RBOOK/”)
>Sql <- read.table(file = “squid1.txt”,
header = TURE)
>Sql <- read.table(file = “squid2.txt”,
header = TURE)
>SquidMerged <- merge (Sq1, Sq2, by = “Sample”)
>SquidMerged
merge命令采用两个数据框Sq1和Sq2作为参数,并使用变量Sample作为相同的标识符合并两个数据集。
3.4 输出数据
write.table函数可以把数字输出到ascii文件。
提取雄性数据,并把它输出到文件,MaleSquid.txt
> SquidM <- Squid [Squid$Sex == 1 , ]
> write.table (SquidM,
File = “MaleSquid.txt” ,
Sep = “ “, quote = FALSE, append = FALSE, na=”NA” )