符号
= 或 <- 或 -> | 赋值 |
<<- 或 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("<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() | 密度图 |
| 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)) |