天天看点

R语言基础总结

符号

= 或 <- 或 -> 赋值
<<- 或 assign() “超赋值”操作符,函数内部定义全局变量
? / ?? / help() Help, e.g. help("scan")
demo()
example() e.g. example(glm)
methods() e.g. methods(class="data.frame")查看数据帧相应的通用函数;methods(plot)查看plot函数能处理的类别
: from:to,冒号优先级最高, e.g. x[1:3]
==、!= 等、不等
|、&、!

或与非。

&和|逐个元素计算,&&和||对向量的第一个元素进行运算,必要时才匹配第二个参数。(类似Java)

NA 不可得、值丢失
NaN 非数值(Not a Number)
NULL (注意:要大写),e.g. 删除21到24列dataA[21:24]<-list(NULL)
%*% 矩阵乘法
[[idx]] 重复中括弧 获取嵌套其中的序列,如path[[m]][1]指第m个path序列(第m列)里的第1个元素,帮助见?("[[")
Lst$variable 从列表或类似类型,获取内部变量
... 额外参数,将一个函数的参数传递给另一个函数
+ 续行符
# 注释
TAB键 自动补齐
上下键 调用历史命令

e.g.

a %*% t(a) #矩阵相乘

fun1 <- function(data, data.frame,graph=TRUE, limit=20, ...) {}

逻辑

if  (条件)   表达式1   else   表达式2
ifelse(条件,  yes,  no)
for (变量  in  向量)
while(条件)
repeat {}
break; next(略过next后面的任务)
is.na(); is.nan()
mode(),判断类型,包括:numeric / integer / double / complex / logical / character
as.sth(),转类型

e.g.

x = c(6:-4); sqrt(ifelse(x >= 0, x, NA))

for (i in 1:5) print (1:i)

while(i <= 5) {

+ print(1:i)

+ i = i+1

+ }

as.numeric(); as.character(); as.factor();as.matrix(); as.data.frame();as.integer; as.vector

操作

getwd() 工作目录
setwd()
source() 批处理,e.g. source("exp.R")
warning()
stop()
print()
formatC() 数值作为字符串输出
cat() 字符串联,可以插入\n(换行)及\t(tab键)
paste() 字符粘贴(非字符型自动转换),sep=string:设置分隔符,默认空格
ls / objects 显示变量
rm() 删除对象,e.g. rm(x,y); rm(list=ls())
proc.time() 系统时间
head() 读取数据头几行
sink() sink("file")后续的输出由终端转向一个外部文件,sink()重新恢复到终端
q() Quit
删除包 e.g. remove.packages("devtools")
安装包

(1)e.g. install.packages("devtools")

(2)download package, menu: packages -> install packages from local zip files

推荐(1),可以把dependent 的包也下载下来。镜像选China.beijing(第一个)最快。命令详见:

http://www.cnblogs.com/xianghang123/archive/2012/06/13/2547940.html

安装特定版本包 Library(devtools); install_version()
sessionInfo() 查看部分已安装包版本
packageVersion() 查看所有已安装包版本!e.g. packageVersion("git2r")
help(package=””) help(package="程序包名"),看R程序包里到底有哪些函数

e.g.

formatC(1/3, format = "f", digits= 4)

paste(1:12) # 与as.character(1:12)等价

数据读取

read.table()

外部读取,ASCII数据

read.table(“文件名”,header=T 或者F,sep="分栏字符",quote="\"'")

e.g. read.table("clipboard",header=T)

read.csv() 外部读取,逗号分界符
read.delim() 外部读取,tab分界符
scan()

大些的数据外部读取,不受电脑内存限制

scan(file=“文件名”,what=”complex”,sep=”分栏字符”)

readLines() 外部读取网站, e.g. readLines("http://www.163.com")
source() 菜单: 文件 > 运行R脚本文件, e.g. source("commands.R")
data.frame() 内部建立
matrix() 内部建立matrix(数据,行数,列数,byrow=T)

注:若数据集很大(如1,000,000观测x200变量),则可由ODBC联接由数据库读入.e.g.

library(RMySQL)

library(DBI)

drv=dbDriver('MySQL')

con=dbConnect(drv, dbname='data', user='tchou', password='password',

host='localhost')

data=dbGetQuery(con, 'select * from SHDATA')

head(data)

数据类型

一般类型

数值型(numeric) 1,1.2,3.1415926
复数型(complex) 1+2i
字符型(character) ‘A’/ “hello world!”
逻辑型(logical) TRUE / FALSE

* str() 查看数据类型 

vector向量(序列)

一维,最为基本的类型,调用C语言运算,相对快些

c() 最简
seq() 较简,seq(from=value, to=value, by=value, length=value)
rep() 复杂,rep(x, times=value) 或rep(x, each=value)
sequence(x) 创建从1 开始以给定参数值结尾的连续整数序列
names() 设置向量元素名字
numeric/character 产生空向量,e.g. numeric()

rule

1、向量的下标从1开始

2、负的下标去掉向量中对应的元素(正为提取)

3、支取向量逻辑关系代入索引中,e.g. x[!is.na(x)]

4、向量运算中的循环法则(recycling rule)

1:2 + 1:4 

R语言基础总结

e.g.

seq(1,10,by=0.5); seq(1,10,length=5)

rep(2:5,2)

x[c(1,4)]; x[x<40&x>10]

fruit <- c(5,10,1); names(fruit) <-c("orange","banana","apple"); fruit

向量化(vectorization)

将一组命令向量化,调用C运算,提高效率

matrix(矩阵)

多维广义上的向量

matrix()
dim()
rbind() 上下合并矩阵
cbind() 左右合并矩阵
t() 转置矩阵

e.g.

matrix(1:4,nr=2, byrow=TRUE)

x <- 1:14; dim(x) <- c(2,7)

list(列表)

包含任何类型的对象

e.g.

fl = list(x = 1:6, y = matrix(1:4, nrow =2))

fl$x; fl$y[2]; fl[1]; fl[[1]]; fl[[1]][2]

data frame(数据框架)

将许多向量组合起来的一个对象,它是二维的,通常其列表示变量,其行表示观测。和矩阵类似的结构,但列可以为不同的对象。

高级应用有attach()、detach()、search()

e.g.

z.df=data.frame(cbind(INDEX = y, VALUE =x))  # INDEX和VALUE是重新命名的向量名字

z.df[1,]; z.df[1,2]

Q&A

(1)删除某一列的方法

Data$genome <- NULL  # Data[2] <- NULL # Data[[2]] <- NULL

Data[1:2] <- list(NULL)  # remove multiple columns

重命名某列

factor 因子

factor创建无序因子(e.g. factor(1:3,levels=1:5)),ordered创建有序因子,levels查看levels

e.g.

province<-c("四川","湖南","江苏","四川","四川","四川","湖南","江苏","湖南","江苏")

factor(province)

levels(factor(province))  # Levels: 湖南 江苏四川

ordered(province)  # Levels: 湖南 < 江苏 < 四川

综合

向量 一维
矩阵 多维
列表 一维复合数据类型
数据框架 多维复合数据类型
因子  分类变量

function(函数)

自定义函数

变量名 = function( 变量列表 )  函数体

e.g.

fl = function(n) {

 ...

}

一般函数

length() sum() max()
range() prod() abs()
mean() var() sd()
log() exp() sqrt()
date()

* range,即c(min(x),max(x))

* prod(x)给出x中所有元素的乘积

e.g.

sum(y<0.5) #个数和; sum(y[y<0.5]) #值和

文本函数

grep()

x=readLines("http://www.163.com")

x[grep("<html", x):3]

矩阵函数

lower.tri(matrix, diag=T) 取右上半角矩阵
which()

根据value逆取索引(注i从1开始)

c(5,6,7,8,9,10,2,4,6)

which(all==9|all==10) #result:5、6

solve(a,b)

(1)aX=b,求X

(2)solve(a) 则aX=I,即求a的逆矩阵X

diag(vector) 创建单位矩阵
eigen() 特征值:eigen(Sm)$values,特征向量:eigen(Sm)$vectors

分布函数

rnorm() 正态分布,rnorm(n,mean = 0, sd = 1)
rexp() 指数分布,rexp(n, rate = 1)
rpois() 泊松分布,rpois(n,λ)
rbinom() 二项式分布,rbinom(n, size, prob)
runif() 均匀分布,runif(n, min = 0, max = 1)
rf() F 分布Fisher-Snedecor,rf(n, df1, df2)
rt() t 分布,rt(n, df)

e.g.

rnorm(30, 100, 0.1)

画图函数

plot() 散点图
abline() 斜率一元回归图
hist() 直方图
density() 密度图
qq Quantile-quantile (Q-Q)图,检测分布形态,e.g. qqnorm(x), qqline(x), qqplot(x,y)
points(x,y)、lines(x,y) 低级绘图命令用于高级绘图
axis(side, . . . ) 在当前图形的指定边上添加坐标
text() 附上文本

参数估计

lsfit(), qr() 最小二乘拟合

假设检验

var.test() F检验, e.g. var.test(height~gender, data=UG)
t.test() T检验, e.g. t.test(UG$weight, mu=170, alternative="less")
chisq.test() 卡方检验, e.g. chisq.test(f,p=prob)

回归

Glm.logit回归

logit.glm<-glm(y~x1+x2+x3,family=binomial,data=d5.1)

summary(logit.glm)

Gam回归

library(mgcv)

gam(Overall ~ s(Income, bs = "cr"), data = d) # s() 样条函数, cr 三次样条

gam(Overall ~ Income + Edu + Health, data = d)  # 此时与glm一样

gam(Overall ~ s(Income) + s(Edu) + s(Health), data = d)

Overall ~ s(Income) + s(Edu) + Health

s(Girth,Height)  #Girth 和 Height 不独立,存在相互影响

共线性

step() 逐步回归分析,e.g. step(sj_lm,direction="both") # both向前向后检验

预测

predict() e.g. predict(logit.step, data.frame(x1=1))