符号
= 或 <- 或 -> |
赋值 |
<<- 或 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(第一个)最快。命令详见: |
安装特定版本包 |
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:4e.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(" |
|
|
矩阵函数
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() |
密度图 |
|
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)) |