R语言中的基本函数使用 - 更新中

Python08

R语言中的基本函数使用 - 更新中,第1张

用法:assign(x, value, pos = -1, envir = as.environment(pos),  inherits = FALSE, immediate = TRUE)

assign函数在循环时候,给变量赋值。

举例说明:

1、

for (i in 1:(length(rowSeq)-1)){

  assign(paste("nginx_server_fields7_", i, sep = ""), nginx_server_fields7[(rowSeq[(i-1)+1]):(rowSeq[i+1]), ])

}

2、

for (i in 1:3){

    assign(paste("a", i, sep = ""), i:10)

}

ls()

[1] "a1" "a2" "a3" "i"

>a1

[1]  1  2  3  4  5  6  7  8  9 10

>a2

[1]  2  3  4  5  6  7  8  9 10

>a3

[1] 3  4  5  6  7  8  9 10

1、paste函数可用于字符串连接

用法:paste (..., sep = " ", collapse = NULL),分隔符默认为空格

我们简单举个例子

1)paste("a","b") ##能连接a b

[1] "a b"

paste("a","b","c")

[1] "a b c"

2)设置分隔符paste("a","b",sep="=") ##注意到用等号分隔了

[1] "a=b"

3)连接多个元素paste("a",1:5,sep="") ##会自动每个元素与a相连

[1] "a1""a2""a3""a4""a5"

4)paste("a",1:5,".pdf",sep="") ##比如想批量输出文件名

[1] "a1.pdf""a2.pdf""a3.pdf""a4.pdf""a5.pdf"、

2、collapse参数

谢益辉大佬说这个参数引无数英雄竞折腰啊,大家只会sep

1)paste("a",1,collapse="+") ##注意到了吧,collapse没用上

[1] "a 1"

2)paste(c("a","b","c"),collapse="+") ##这样就很容易理解了,collapse折叠起了元素

[1] "a+b+c"

3)paste("a",1:5,sep="") ##再来更明显的举例

[1] "a1""a2""a3""a4""a5"

4)paste("a",1:5,sep="",collapse="+") ##先在元素间连接,然后折叠

[1] "a1+a2+a3+a4+a5"

3、与paste0函数的区别

paste0函数,默认sep=""是两个函数唯一的区别

paste(c("a","b","c"),1:3)##默认空格符

[1] "a 1""b 2""c 3"

paste(c("a","b","c"),1:3,sep=" ")

[1] "a 1""b 2""c 3"

paste(c("a","b","c"),1:3,sep="")

[1] "a1""b2""c3"

如果两个向量长度不同paste(c("a","b","c"),1:5) ##超出范围后继续从前向后连接

[1] "a 1"  "b 2"  "c 3"  "a 4"  "b 5"

paste0(c("a","b","c"),1:3)#默认元素连接为sep=""

[1] "a1""b2""c3"

用法:unlist()函数的作用,就是将list结构的数据du,变zhi成非list的数据,即将list数据变成 字符串向量 或者数字向量的形式

如果是向量的话就直接输出向量

例子:

%in%相当于match()函数的一个缩写。用来判断一个数组或矩阵是否包含在另一个数组或矩阵里。举个例子一目了然:

#首先复制两个变量a和b

>a <- 1:5

>b <- 3:7

>a %in% b    #看a的元素是否包含在b中输出结果如下:

[1] FALSE FALSE  TRUE  TRUE  TRUE

用法:apply(x, MARGIN, FUN, ...)

作用:对 矩阵 的行或列使用函数,或者对 数组 的各个维度使用函数

x为数据对象,MARGIN是维度的下标,MARGIN=1表示行,MARGIN=2表示列,FUN是自己指定的任意或自定义函数

注:数据框dataframe也可以使用apply函数,该函数会自动将数据框转化为矩阵,但前提是数据框中各列的数据类型 必须是数值型,否则会报错。

用法:lapply(x,FUN,...)

作用:对列表中的各个元素使用函数

x是格式为列表的数据源,FUN是任意函数。

intersect(data1,data2):交集

union(data1,data2):并集

R语言数据对象与运算

R语言数据对象与运算 笔记整理

2.1 数据对象及类型

R语言创建和控制的实体被称为对象(object)

ls()命令来查看当前系统里的数据对象

R对象的名称必须以一个英文字母打头,并由一串大小写字母、数字或钟点组成

注意:R区分大小写

不要用R的内置函数名称作为数据对象的名称,如c、length等

2.2 数据对象类型

R语言的对象包括

数值型(numeric):实数, 可写成整数(integers)、小数(decimal fractions)、科学记数(scientific notation)

逻辑型(logical):T(true)或F(FALSE)

字符型(character):夹在" "或之间

复数型(complex):形如a+bi

原味型(raw):以二进制形式保存数据

缺省型(missing value):有些统计资料是不完整的,当一个元素或值在统计的时候是“不可得到(not available)”或“缺失值(missing value)”的时候,相关位置可能会被保留并赋予一个特定的NA(not available)值,任何NA的运算结果都是NA。

辨别和转换数据对象类型的函数:

辨别 转换

character is.character() as,character()

complex

double

integer

logical

NA

numeric

2.3 数据对象构造

R语言里的数据对象主要有六种构造:向量(vector)、矩阵(matrix)、数组(array)、列表(list)、数据框(data frames)、因子(factor)

2.3.1 向量(vector)是由有相同基本类型元素组成的序列,相当于一维数组

5个数值组成的向量x,这是一个用函数c()完成的赋值语句,这里c()可以有任意多个参数,而它输出的值则是一个把这些参数首尾相连形成的一个向量

R的赋值符号除了“<-”外,还有"->""="

例如:

>c(1,3,5,7,9) ->y

>y

[1] 2 5 8 3

>z = c(1,3,5,7,9)

>z

[1] 1 3 5 7 9

assign()函数对向量进行赋值

length():可返回向量的长度

mode()可返回向量的数据类型

正则序列 用 “:”符号,可产生有规律的正则序列(: 的运算级别最高)

函数seq()产生有规律的各种序列

seq(from,to ,by) from 给序列的起始值,to表示序列的终止值,by表示步长(by 省略时,表示步长值为1)

>seq(1,10,2)

[1] 1 3 5 7 9

>seq(1,10)

[1] 1 2 3 4 5 6 7 8 9 10

有时关注的是数列的长度,利用句法:seq(下界,by=,length=)

>seq(1,by=2,length=10)

[1] 1 3 5 7 9 11 13 15 17 19

rep(x,times,……)x表示要重复的对象,times表示重复的次数

>rep(c(1,3),4)

[1] 1 3 1 3 1 3 1 3

>rep(c(1,3),each=4)

[1] 1 1 1 1 3 3 3 3

对每个元素进行重复

R中的内置函数:

mean()来示向量的均值

median()求是位数

var()求方差

sd()求标准差

sort()对向量排序

rev()将向量按原方向的反方向排列

rank()给求出向量的秩

prod()求向量连乘积

append()为向量添加元素

对向量运算常见函数表

函数 用途

sum() 求和

max() 求最大值

min() 求最小值

range() 求极差(全矩)

mean() 求均值

median 求中位数

var() 求方差

sd() 求标准差

sort() 排序

rev() 反排序

rank() 求秩

append() 添加

replace() 替换

match() 匹配

pmatch() 部分匹配

all() 判断所有

any() 判断部分

prod() 积

2.3.2 矩阵

矩阵(matrix)是将数据用行和列排列的长方形表格,它是二维的数组,其单元必须是相同的数据类型,通常用列来表示不同的变量,用行表示各个对象。

其句法是:

matrix(data=NA,ncol=1,byrow-=FALSE,dimnames=NULL)

data是必须的,其它几个选择参数。

nrow表示矩阵的行数

ncol表示矩阵的列数

byrow默认为FALSE,表示矩阵按列排列,如设置为T,表示按行排列;

dimnames可更改矩阵行列名字

diag()函数生成对角矩阵

diag()这个函数比较特别,当数据是向量时则生成对角矩阵,但当数据是矩阵时,则返回对角元素

也可用函数diag()生成单位矩阵

当我们生成了某个矩阵后,若要访问矩阵的某个元素或某行(列),可以利用形如A[i,j]的形式得到相应的索引矩阵

矩阵可进行相应的加减乘除运算,但运算过程中要注意行数和列数的限制条件

R里A*B并不是表示矩阵相乘,只表示矩阵对应的元素相乘

矩阵相乘应用A%*%B

dim()返回矩阵的行数和列数

nrow()返回矩阵的行数

ncol()返回矩阵的列数

solve()返回矩阵的逆矩阵

对矩阵运算的常见函数

函数 用途

as.matrix() 把非矩阵的转换成矩阵

is.matrix() 辨别是否矩阵

diag() 返回对角元素或生成对角矩阵

eigen() 求特征值和特征向量

solve() 求逆矩阵

chol() Choleski分解

svd() 奇异值分解

qr() QR分解

det() 求行列式

dim() 返回行列数

t() 矩阵转置

apply() 对矩阵应用函数

R语言还提供了专门针对矩阵的行或列计算的函数

如 colSUms()对矩阵各列求和colMeans()求矩阵各列的均值

类似的有 rowSums()rowMeans()

更一般的方法:

apply()函数来对各行各列进行运算

句法是:apply(X,MARGIN,FUN,……)

X表示要处理的数据

MARGIN表示函数作用的范围

取1表示对行运用函数

取2表示对列运用函数

FUN表示要运用的函数

rbind()、cbind()将两个或两个以上的矩阵合并起来

rbind()表示按行合并,cbind()则表示按列合并

2.3.3 数组

数组(array)可以看作是带有多个下标的类型相同的元素的集合。

数组的生成函数是array(),其句法是

array(data=NA,dim=length(data),dimnames-NULL)

data表示数据,可以为空

dim 表示维数

dimnames可以更改数组难度的名称

2.3.4 列表

向量、矩阵和的单元必须是同一类型的数据,若一个数据对象需要含有不同的数据类型,可采用列表(list)这种数据对象的形式。

列表是一个对象的有序集合构成的对象,列表中包含的对象又称为它的分量(components),分量可以是不同的模式或(和)类型

语法式为:list (变量1=分量1,变量2=分量2,……)

若要访问列表的某一成分,可以用LST[[1]],LST[[2]]的形式访问

因分量可以被命名,故可以在列表名称后加$符号,再写上成分名称来访问列表分量

函数length()、mode()、names()可以分别返回列表的长度(分量的数目)、数据类型、列表里成分的名字

2.3.5 数据框

数据框(data frame)是一种矩阵形式的数据,但数据框中各列可以是不同类型的数据。数据框每列是一个变量,每行是一个观测 。

对可能列入数据框中的列表有如下的一些限制:

1.分量必须是向量(数值,字符,逻辑),因子,数值矩阵,列表或者其他数据框。

2.矩阵,列表和数据框为新的数据框提供了尽可能多的变量,因为它们各自拥有列、元素或者变量。

3.数值向量、逻辑值、因子保持原有格式,而字符向量会被强制转换成因子并且它的水平就是向量中出现的独立值。

4.在数据框中以变量形式出现的向量结构必须长度一致,矩阵结构必须有一样的行数。

R中用函数data.frame()生成数据框,其句法是:data.frame(data1,data2,……)

数据框的列名默认为变量名,也可对列名进行重新命名

也可以对数据框的行名进行修改

2.3.6 因子和有序因子

分类型数据经常要把数据分成不同的水平或因子(factor)

生成因子的命令是factor(),其句法是:factor(data,levels,labels,……)

其中data表示数据

levels是因子水平向量

labels是因子的标签向量

levels,labels是备选项,可以不选

若上面的每个因子并不表示因子的大小,要表达因子之间有大小顺序(考虑因子之间的顺序),则可以用 ordered()函数产生

2.4 数据的录入及编辑

c函数:c函数是把各个值联成一个向量或列表,可以形成数值型向量、字符型向量或其它类型向量

scan函数:功能类似于c函数,实际上是一种键盘输入数据函数。当输入scan(),然后按回车键,这时将等待输入数据,数据之间只要空格分开即可(c函数要用逗号分开)。输入完数据,再按回车键,这时数据录入完毕。

scan函数还可以读入外部文本文件,若现有一个文本文件,data.txt,读入这个文件的命令是:>x=scan(file="dat.txt")

若原文件的数据之间有逗号等分隔符,用scan读入应该去掉这些分隔符,其命令是:>x=scan(file="dat.txt",sep=",")

编辑数据

data.entry命令

xx原先未被定义,现在赋予其一个空值,这时会出现一个电子表格界面,等待输入数据:>data.entry(xx=c(NA))

当电子表格关闭后,数据会自动保存

edit命令用来编辑函数,也可用来编辑数据,但不会自动保存

fix函数与edit类似,但它可以自动保存

从外部文件读入数据

从文本文件读取:

>s1=read.table("student.txt")

>s1

V1V2V3

1class sexscore

2 1 女80

3 1 男85

4 2 男92

5 2 女76

6 3 女61

7 3 女95

8 3 男83

读入表格数据的命令是:read.table

忽略掉标签而直接使用默认的行标签

>s2=read.table("student.txt",header=T)

>s2

class sexscore

1 1 女80

2 1 男85

3 2 男92

4 2 女76

5 3 女61

6 3 女95

7 3 男83

从网络读入数据

url可以从网页上读入正确格式的数据,要借助read.table函数

> address=http://www.the-data-mine.com/bin/view/Misc/WebHome

/sample.txt

>read.table(file=url(address))

读入其他格式的数据库

要读入其他格式的数据库,必须先安装"foreign"模块,它不属于R的8个内置模块,需在使用前安装。 library(foreign)

SAS:R只能诗篇SAS Transport format(XPORT)文件,需要把普通的SAS数据文件(.ssd和.sas7bdat)转换成Transport format(XPORT)文件,再用命令:read.xport()

SPSS数据库:read.spss()可读入SPSS数据文件

Epi info数据库:

要给数据集一个名字,则是read.epiinfo("文件名.rec")->名称

Stata数据库:

R可读入Stata5,6,7的数据库

读入数据文件后,使用数据集名$变量名,即可使用各个变量

>read.dta(“文件名.dta”)

读入数据文件后,使用数据集名$变量名,即可使用各个变量。

>mean(data$age)

便是计算数据集 data中的变量age的均数。

2.5 函数、循环与条件表达式

2.5.1 编写函数

句法是:

函数名 = function (参数1,参数2…)

{

函数体

函数返回值

}

对于这类只有一个算术式的简单函数,也要不要{}

>mean(data$age)

便是计算数据集 data中的变量age的均数。

若不使用圆括号,直接输入函数名,按回车键将显示函数的定义式:

单参数:使函数个性化,可使用单参数,函数将会根据参数的不同,返回值不同

> welcome.sb = function(names) print(paste("welcome",names,"to

use R"))

>welcome.sb("Mr fang")

[1] "welcome Mr fang to use R"

>welcome.sb("Mr Wang")

[1] "welcome Mr Wang to use R"

默认参数:即不输入任何参数

函数的默认参数

> welcome.sb=function(names="Mr fang")print(paste("welcome",

names,"to use R"))

>welcome.sb()

[1] "welcome Mr fang to use R"

当函数体的表达式超过一个时,要用{}封起来

2.5.2 for循环

for循环的句法是:

for (变量 in取值向量) {

表达式…

}

%>%是管道符的意思,把左边的输出(不包括 <- 之前的)当成右边的输入。

都可以shift + alt + 上下 :快速复制粘贴

alt + 上下 :移动行

ctrl + alt + 上下 :多重光标

首先选中要注释掉的行,然后按Ctrl+shift+C ,这样就注释掉了。

sessionInfo()

.libPaths()

一篇关于包的博客

library(installr)

updateR()

COS中文论坛 统计之都旗下的论坛网站(d.cosx.org),它和其主站(cosx.org)一 起,是一个致力于推广与应用统计学知识的网站和社区。

1 help("t.test")

2 ?t.test

3 help.search("t.test")

4 apropos("t.test")

5 RGui>Help>Html help

6 查看R包pdf手册

getwd() 显示工作目录

setwd() 设定工作目录

list.files() 列出目录或文件夹下的文件

demo( ) 显示R的基本程序包

example( ) 显示在线帮助的例子

example(barplot)

可以把若干行命令保存在一个文本文件(比如Eg3.R)中,然 后用source函数来运行整个文件: source("E:/R demo/Chapter1-Eg3.R")

sum, mean, var, sd, min, max, range, median, IQR(四分位间距)等为统计量, sort,order,rank与排序有关, 其它还有ave,fivenum,mad,quantile, stem等

-1:1/0 当中/是优先级靠后的操作。相当于c(-1,0,1)/0

names(df) <- c("male", "female", "unknown")

对于矩阵,我们可以使用属性rownames和colnames来访问行名和列名。

我们也可以先定义矩阵x然后再为dimnames(x)赋值:

数值型数据 :1.2345e30

复数常量就用3.5-2.1i

缺失值:NA(Not Available)

是否含有缺失值:

NaN表示不确定的数

NaN属于NA的一种

NA不是NaN

注意下面例子的比较 :

assign("x1", c(1, 2))

sort(x)返回x的元素从小到大排序的结果向量。

x=c(2,10,6,8,4,5)sort(x) [1] 2 4 5 6 8 10  order(x)返回使得x从小到大排列的元素下标向量(x[order(x)]等效于sort(x))。

此外numeric(n)可以产生一个长度为n的零向量(numeric(n)是一个 很好用的外部存储器)

paste函数用来把它的自变量连成一个字符串,中间用空格分开

Re( )计算实部,Im( )计算虚部, Mod( ) 计算复数模,Arg( )计算复数幅角。

v为一个向量,取值在-length(x)到-1之间,表示扣除相应 位置的元素。例如:

可以用x[]的写法:

R的对象有两个基本的属性:类型属性(mode)和长度属性(length)。

长度为零的向量 numeric( ) 或者 numeric(0) character( ) 或者 character(0)

数组(array): 带多个下标的类型相同的元素的集合,

函数matrix():用于构造二维数组,即矩阵

函数factor( )用来把一个向量编码成为一个因子。

可以自行指定各离散取值水平(levels),不指定时由x的不同值来求得。

• labels可以用来指定各水平的标签,不指定时用各离散取值的对应字符串。

• exclude参数用来指定要转换为缺失值(NA)的元素值集合。

• ordered取真值时表示因子水平(Levels)是有次序的

因子可以用来作为另外的同长度变量的分类变量,使用tapply() 函数可以完成分类统计

nchar()这个函数简单,统计向量中每个元素的字符个数

tolower()和toupper()可以进行大小写字母的转换

chartr()把字符串里的元素,按要求进行转换

拆分字符串用strsplit()函数,strsplit得到的结果是列表,后面的处理要调用列表

其任何一个语句都可以看成是一个表达式。

表达式之间以分号分隔或用换行分隔。

表达式可以续行,只要前一行不是完整表达式,则下一行为上一行的继续。

线性回归模型:

lm()函数的返回值叫做模型拟合结果对象,本质上是一个列表, 有model 、coefficients、residuals等成员。lm()的结果显示十分 简单,为了获得更多的拟合信息,可以使用对lm类对象有特 殊操作的通用函数,这些函数包括:

add1 coef effects kappa predict residuals alias deviance family labels print summary anova drop1 formula plot proj

加号+或 者减号-,表示在模型中加入一项或去掉一项,第一项前面如果是加号可以 省略

在非交互运行(程序)中应使用print()来输出。

• digits参数指定每个数输出的有效数字位数;

• quote 参数指定字符串输出时是否带两边的撇号;

• print.gap参数指定矩阵或数组输出时列之间的间距

也用来输出,但它可以把多个参数连接起来再输出(具有paste() 的功能)。例如:

读取文件:

strsplit()得到的结果是 列表。

grep() grepl()

sub()和gsub()

但严格地说R语言 没有字符串替换的函数,因为R语言不管什么操作对参数都是传值不传址,区别如下:

用substr()和substring() 可以通过位置进行字符串拆分或提取,两者的参数设置基本相同:

strtrim() 函数可以用于将字符串修剪到特定的显示宽度通过位置进 行字符串拆分或提取:

由于日期内部是用double存储的天数,所以是可以相减的。

weekdays ( )取日期对象所处的周几;

months ( )取日期对象的月份;

quarters ( )取日期对象的季度;

其任何一个语句都可以看成是一个表达式。

表达式之间以分号分隔或用换行分隔。

表达式可以续行,只要前一行不是完整表达式,则下一行为上一行的继续。

quantile(x, probs=seq(0,1,0.25), na.rm=FALSE, names=TRUE, type=7, …)

probs给出相应的百分位数,默认值是0,0.25,0.5,0.75,1;na.rm是处 理缺失数据的,na.rm=TRUE时,NA和NaN将从数据中移走,向量取值中 若有NA或NaN,要添加这一参数,否则会出错;names若为TRUE,返回 值当中有names这个属性"type是取值1-9的整数,选择了九种分位数算法 (具体算法见帮助文件)中的一种。

数据的分布主要考察分布函数(p), 密度函数(d), 分位数函数(q)及产生随机数(r)

以正态分布为例:

hist(x, breaks="Sturges", freq=NULL, probability=!freq,… )

break规定了直方图的组距(必须覆盖数据的范围);freq是逻辑变量,TRUE是频率直方图, FALSE是密度直方图;probability和freq相反,TRUE是密度直方图,FALSE是频率直方图

其形式为 coplot(y ~ x | z),其中x 和y是数值型向量,z是同长度的因子。 对z的每一水平,绘制相应组的x和y的散点图

R缺省的图形边空常常太大,以至于有时图形窗口较小时边空占了整个图形的很大一部分。

R可以在同一页面开若干个按行、列排列的窗格,在每个窗格中可以作一 幅图。每个图有自己的边空,而所有图的外面可以包一个“外边空”。

一页多图用 mfrow 参数或 mfcol 参数规定,如

函数 mtext 用来在外边空加文字标注。其用法为

在多图环境中还可以用 mfg 参数来直接跳到某一个窗格,比如

可以不使用多图环境而直接在页面中的任意位置产生一个窗格来绘图,参数为 fig ,如:

先用as.factor()转化成因子。因为levels()函数里面必须是因子。

dat$Genre没有转化成因子形式,as.factor(dat$Genre)就可以了

该消息表明文件的最后一行不以行尾 (EOL) 字符结尾(换行符 ( \n ) 或回车 + 换行符 ( \r\n ))。此消息的初衷是警告您该文件可能不完整;大多数数据文件都有一个 EOL 字符作为文件中的最后一个字符。

这是因为R读取文件的时候,是一整段character,所以它只会返回1,适当给他分一下段。