R语言入门

R介绍

R的功能与特点

  1. R是一个有着强大统计分析及作图功能的软件系统
  2. R同Matlab一样不需要编译就可执行代码
  3. 不依赖于操作系统
  4. 大约有25个包和R同时发布(被称为“标准”和“推荐”包),更多的包可以通过网上或其CRAN 社区

R的安装与运行

1、R程序包的安装

菜单方式:在联网的条件下,按步骤,程序包到安装程序包,选择CRAN镜像服务器,选择程序包进行安装;
命令方式:在已经联网的条件下, 在命令提示符后键入

install.packages(“PKname”) #完成程序包PKname的安装.

本地安装:在无上网条件下,先从CRAN社区下载需要的程序包及与之关联的程序包, 再按第一种方式通过“程序包”菜单中的“用本机的zip文件安装程序包”选定本机上的程序包(zip文件)进行安装。
2、程序包的载入
新安装的程序包在使用前必须先载入
菜单方式:按步骤,程序包,载入程序包,再从已有的程序包中选定需要的一个加载。
命令方式:在命令提示符后键入

library(“PKname”) #来加载程序包PKname.

R的基本原理与核心

一个简短的R对话

  • 赋值:箭头,等号或者assign函数

  • 帮助:help(fun), find(fun), args(fun)

  • 数据的浏览与编辑
    浏览:mtcars 可以显示数据集mtcars中全部的32个观测值.
    head(mtcars) 仅显示数据集mtcars中前7个观测值.
    names(mtcars) 仅显示数据集mtcars中的变量, 在此为11个指标.

    编辑:data.entry(mtcars)通过R的数据编辑器打开数据集mtcars, 除了浏览数据集外,可对变量及其观测值进行修改.
    MTcars <- edit(mtcars)启动R的数据编辑器, 对原来的数据集编辑,新的数据集赋给MTcars, 而原来的数据集保持不变.如果你要修改原来的数据集,使命令edit( )前后的数据集同名即可.
    xnew <- edit(data.frame( ))可以编辑生成新的数据集xnew.
    fix(mtcars)可以完成数据集mtcars的直接修改. 等价于命令mtcars <- edit(mtcars)

    tip:命令data.entry( )和edit( )都可用于编辑向量、矩阵、数据
    框和列表,前者启用的都是R的数据编辑器, 后者有所不同: 对于向量、
    列表和数组edit( )启用的是R Editor

  • 数据激活和清除
    attach(mtcars)就激活mtcars, 使之成为当前的数据集,detach(mtcars)清除当前数据集

  • 属性数据的分析
    变量cyl(汽缸数)为属性变量, table(cyl)告诉我们cyl取3个值:4,6,8,相应的频数为11, 7, 14.barplot(table(cyl))显示了cyl的频数直方图. barplot(cyl)在此不适用, 它仅适用于数值型变量.

  • 数值型数据的分析
    变量mpg(每加仑公里数)为数值变量,stem(mpg)画茎叶图(stem-and-leaf plot),hist(mpg)画直方图, boxplot(mpg)画框须图(stem-and-leaf plot)

    mean(mpg)计算平均值,mean(mpg, trim = .1)计算截去10%的平均值,tapply(mpg,cyl,mean)按分组变量cyl计算mpg的分组平均值,mean(mpg[cyl == 4])计算cyl为4的那些mpg的平均值,IQR(mpg)计算四分位数的极差(interquartile range),quantile(mpg)或者fivenum(mpg)计算样本常用的分位数: 极小、极大、中位数及两个四分位数,quantile(mpg, probs)计算由向量prob给定的各概率处的样本分位数,summary(mpg)计算常用的描述性统计量, 它们分别是最小值(Min.)、第一四分位数(1stQu.)、中位数(Median)、平均值(Mean)、第三分位数(3rd Qu.)和最大值(Max.), sd(mpg)计算标准差,mad(mpg)计算中位绝对离差(median absolute deviation)

  • 寻找二元关系
    plot(cyl,mpg)二维散点图
    z <- lm(cyl ~ mpg)拟合线性回归,输出截距和斜率
    cor(cyl,mpg)得到相关系数R,考查回归拟合好坏的程度

R的数据结构

  • R的对象与属性
    对象的属性:类型mode()和长度length(),类型包括数值型、字符型、复数型、逻辑型。
    tip:字符型的值若包括双引号,可以让它跟在反斜杠“\”后面
    在这里插入图片描述
    在这里插入图片描述

  • 浏览对象信息
    ls( )显示所有在内存中的对象名
    ls(pat = "m")显示出在名称中带有m的对象
    ls(pat = "^m")显示名称中以某个字母开头的对象
    ls.str( )显示内存中所有对象的详细信息,设定参数max.level =-1可以避免显示过长

  • 删除对象
    rm(x)删除对象x
    rm(x,y)删除对象x和y
    rm(list=ls( ))删除内存中所有的对象
    rm(list=ls(pat="^m"))删除对象中以字母m开头的对象

  • 对象的建立
    数值型向量(c)
    tip: 不同长度向量的加、减、乘、除遵从循环法则, 但要注意通常要求向量的长度为倍数关系, 否则会出现警告: “长向量并非是短向量的整数倍”.

> z <- seq(1,5,by=0.5) # 简单规律型,等价于 seq(from=1,to=5,by=0.5)
> z
[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0

> z <- seq(1,10,length=11) # 等价于 seq(1,10,length.out=11)
> z
[1] 1.0 1.9 2.8 3.7 4.6 5.5 6.4 7.3 8.2 9.1 10.0

> z <- rep(2:5,2) # 等价于 rep(2:5, times=2)
> z
[1] 2 3 4 5 2 3 4 5

> z <- rep(2:5,rep(2,4))
[1] 2 2 3 3 4 4 5 5

> z <- rep(1:3, times = 4, each = 2)
> z
> [1] 1 1 2 2 3 3 1 1 2 2 3 3 1 1 2 2 3 3 1 1 2 2 3 3

> z <- x<-c(42,7,64,9)
> z
[1] 42 7 64 9

> z <- scan( ) # 通过键盘建立向量

> z <- sequence(3:5)
> z
[1] 1 2 3 1 2 3 4 1 2 3 4 5

> z <- sequence(c(10,5))
> z
[1] 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5

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

字符型向量(c)

> Z <- c("green","blue sky","-99")
> Z
[1] "green" "blue sky" "-99"
#函数paste()可以接受任意个参数,并从它们中逐个取出字符并连成字符串,形成的字符串的个数与参数中最长字符串的长度相同. 
> labs <- paste(c("X","Y"), 1:10, sep="")
> labs
[1] "X1" "Y2" "X3" "Y4" "X5" "Y6" "X7" "Y8" "X9" "Y10"

因子型向量(c)
levels 用来指定因子的水平;labels用来指定水平的名字;exclude表示从向量x中剔除的水平值;ordered是一个逻辑型选项, 用来指定因子的水平是否有次序.

> a <- c("green", "blue", "green", "yellow")
> a <- factor(a)   # 转换成因子向量

# 函数gl( )能产生规则的因子序列. 这个函数的用法是gl(k,n),其中k是水平数, n是每个水平重复的次数. length用来指定产生数据的个数, label用来指定每个水平因子的名字.
> gl(2, 2, length=20)
[1] 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2
Levels: 1 2

向量下标与子集的提取

> x[1:10] #选取了x的前10个元素(假设x的长度不小于10).
> x[c(1,4)]  #取出向量x的第1和第4个元素.
> y <- x[-(1:5)] #从x中去除前5个元素得到y.
#若存在names属性,则也可用name进行索引,与下标索引效果相同。
> x <- c(42,7,64,9)
> x>10 # 值大于10的元素逻辑值
[1] TRUE FALSE TRUE FALSE
> x[x>10] # 值大于10的元素,逻辑索引
[1] 42 64

数组(array)
数组是一个k维的数据表; 矩阵是二维的数组,向量是一维的数组。而且向量、数组或者矩阵中的所有元素都必须是同一种类型的. 向量,属性包括类型和长度;而数组与矩阵, 除了类型和长度外, 还需要维数dim这个属性来描述. 因此如果一个向量需要在R中以数组的方式被处理,则必须含有一个维数向量作为它的dim属性.
array(data, dim, dimnames)
data为一向量; dim为数组的维数向量; dimnames为由各维的名称构成的向量, 缺省为空.如果数据项太少,则采用循环准则填充数组(或矩阵).

> A <- array(1:8, dim = c(2, 2, 2))
> A
, , 1
[,1] [,2]
[1,] 1 3
[2,] 2 4
, , 2
[,1] [,2]
[1,] 5 7
[2,] 6 8

矩阵(matrix)
可使用上述数组的方式建立,或者使用matrix( )建立矩阵,diag()建立对角阵。数据项填充矩阵的方向可通过参数byrow来指定, 其缺省是按列填充
的(byrow=FALSE). byrow=TRUE表示按行填充数据。矩阵的维数使用c( )会得到与数组不同的结果(除非是方阵)。

数组与矩阵的下标与子集的提取
类似于向量的做法

对矩阵运算的函数:t( )转置,diag( )提取对角元,rbind( )几个矩阵按行合并,cbind( )几个矩阵按列合并,*矩阵逐元乘积,%*%矩阵的代数乘积,det( )矩阵行列式,crossprod( )矩阵交叉乘积,eigen( )计算特征根和特征向量,qr( )QR分解。

apply(X, MARGIN, FUN)其 中X为 参 与 运 算 的 矩 阵, FUN为 函 数 或 “+”等,MARGIN=1表示按列计算, MARGIN=2表示按行计算,MARGIN=c(1,2)表示按行列计算(在至少3维的数组中使用)。

数据框(frame)
由若干个变量的观测值组成的数据集, 在R中称为数据框. 数据框是一个对像, 是二维的,且各个变量的观测值有相同的长度. 列表示变量,而行表示观测. 显示数据框时左侧会显示观测值的序号。
data.frame( )生成数据框,数据框中的向量必须有相同的长度或长度有倍数关系,如果其中有一个比其它的短,它将按循环法则“循环”整数次。

# 由向量生成数据框
> weight <- c(70.6, 56.4, 80, 59.5)
> x <- (c("adult", "teen", "adult", "teen"))
> wag <- data.frame(weight, age = x)
> wag
weight age
1 70.6 adult
2 56.4 teen
3 80.0 adult
4 59.5 teen
# 读取数据文件生成数据框
> foo <- read.table(file = "c:/data/foo.txt", header = T)
> foo
treat weight
1 A 3.4
2 B NA
3 A 5.8

数据框的下标与子集的提取与矩阵相似,不同的是数据框可以用列名提取。

# 数据框中添加新的变量,下面给出了三种方法
> Puromycin$iconc <- 1/Puromycin$conc
> Puromycin$iconc <- with(Puromycin, 1/conc)
> Puromycin <- transform(Puromycin, iconc = 1/conc,sqrtconc = sqrt(conc))
> head(Puromycin)
conc rate state iconc sqrtconc
1 0.02 76 treated 50.00000 0.1414214
2 0.02 47 treated 50.00000 0.1414214
3 0.06 97 treated 16.66667 0.2449490
4 0.06 107 treated 16.66667 0.2449490
5 0.11 123 treated 9.09091 0.3316625
6 0.11 139 treated 9.09091 0.3316625

列表(list)
R中的列表(list)可以包含任何类型的数据对象

> L1 <- list(1:6, matrix(1:4, nrow = 2))
> L1
[[1]]
[1] 1 2 3 4 5 6
[[2]]
[,1] [,2]
[1,] 1 3
[2,] 2 4
L2 <- list(x = 1:6, y = matrix(1:4, nrow = 2))
> L2
$x
[1] 1 2 3 4 5 6
$y
[,1] [,2]
[1,] 1 3
[2,] 2 4
> L2$x
[1] 1 2 3 4 5 6
> L2[1]
$x
[1] 1 2 3 4 5 6
> L2[[1]]
[1] 1 2 3 4 5 6
> L2[[1]][2]
[1] 2
> L2$x[2]
[1] 2
> L2$y[4]
[1] 4

时间序列(ts)

> ts(1:47, frequency = 12, start = c(1959, 2))
    Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1959     1   2   3   4    5   6   7   8   9  10  11
1960 12 13  14  15  16   17  18  19  20  21  22  23
1961 24 25  26  27  28   29  30  31  32  33  34  35
1962 36 37  38  39  40   41  42  43  44  45  46  47
> ts(1:10, frequency = 4, start = c(1959, 2))
     Qtr1 Qtr2 Qtr3 Qtr4
1959         1    2    3
1960   4     5    6    7
1961   8     9   10

数据的存储与读取

  • 工作目录
    如果一个文件不在工作目录中,则必须给出文件路径,getwd( )获取当前工作目录,setwd("C:/data")将当前的工作目录改变为C:\data,目录的分割符使用正斜杠“/”或两个反斜杠“\”。

  • 数据存储

> d <- data.frame(obs = c(1, 2, 3), treat = c("A", "B", "A"), weight = c(2.3, NA, 9))
# 保存为简单的文本文件, 其中选项row.names = F表示行名不写入文件, quote = F表示变量名不放在双引号中.
> write.table(d, file = "c:/data/foo.txt",row.names = F, quote = F)
# 保存为逗号分割的文本文件
> write.csv(d, file = "c:/data/foo.csv", row.names = F, quote = F)
# 保存为R格式文件
> save(d, file = "c:/data/foo.Rdata")
> load(file = "c:/data/foo.Rdata")
  • 数据读取
# 读取表格数据,形成数据框
> read.table("houses.dat", header=TRUE)
# scan()函数可对列表对象直接命名
> mydata <- scan("data.dat", what = list("", 0, 0))
> mydata <- scan("data.dat", what = list(Sex="", Weight=0, Height=0))
> mydata
$Sex
[1] "M" "M" "F" "F"
$Weight
[1] 65 70 54 58
$Height
[1] 168 172 156 163
# read.fwf( )用来读取文件中一些固定宽度格式的数据
> mydata <- read.fwf("data.txt", widths=c(1, 4, 3),
col.names=c("X","Y","Z"))

特殊的,读取Excal数据可复制Excal中数据区域, 再复制. 然后在R中键入命令 mydata <- read.delim("clipboard")即可,或者使用程序包RODBC.

> library(RODBC)
> z <- odbcConnectExcel("c:/data/body.xls")
> foo <- sqlFetch(z, "Sheet1")
> close(z)

R编程

  • 条件语句
> if (x >= 0) sqrt(x) else NA
> ifelse(x >= 0, sqrt(x), NA)
  • 循环语句
> for (i in 1:5) print (1:i)
> i=1
> while(i <= 5) {
     print(1:i)
     i = i+1
}
  • 向量化
    在实际编程中,如果能将一组命令向量化,则应尽量避免循环,在R中使用向量化,R会立即调用C进行运算,因而大大提高计算的效率。
> y <- numeric(length(x)) #创建一个x等长的向量y
> for (i in 1:length(x)){
      if (x[i] == b)
           y[i] <- 0
      else
           y[i] <- 1
}
# 改写为向量
> y[x == b] <- 0
> y[x != b] <- 1
  • 函数
> myfun <- function(S, F) {
      data <- read.table(F)
      plot(data$V1, data$V2, type="l")
      title(S)
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值