R语言统计入门-第二章

第2章 R语言环境

2.1 会话管理

2.1.1 工作空间窗口

#用ls()命令了解都哪些变量定义在工作区
ls()
## character(0)
#这样输出有些乱
#可以通过rm()命令来删除某些对象
rm(height,weight)
## Warning in rm(height, weight): 找不到对象'height'
## Warning in rm(height, weight): 找不到对象'weight'

2.1.6 内置数据

#加载数据thuesen
data(thuesen)
## Warning in data(thuesen): data set 'thuesen' not found
#需要注意的是thuesen这个数据框隶属于ISwR数据
#要加载thuesen,需要先加载ISwR
library(ISwR)
data(thuesen)

2.1.7 attach和detach

#如果要重复写一些很长的命令,在数据集中获取变量的符号很很麻烦
#比如
plot(thuesen$blood.glucose,thuesen$short.velocity)

#但可以简化
#可以让R在给定数据集的变量中寻找目标
attach(thuesen)
#然后thuesen中的数据就可以得到,而不需要使用$符号
blood.glucose
##  [1] 15.3 10.8  8.1 19.5  7.2  5.3  9.3 11.1  7.5 12.2  6.7  5.2 19.0 15.1
## [15]  6.7  8.6  4.2 10.3 12.5 16.1 13.3  4.9  8.8  9.5
#上述命令使thuesen被置于系统的搜索路径中
#可以用search()看到搜索路径
#可以看到thuesen被置于搜索路径的第二位
#.GlobalEnv是工作空间
#package:base是定义了所有标准函数的系统库
search()
##  [1] ".GlobalEnv"        "thuesen"           "package:ISwR"     
##  [4] "package:methods"   "package:stats"     "package:graphics" 
##  [7] "package:grDevices" "package:utils"     "package:datasets" 
## [10] "Autoloads"         "package:base"
#可以用detach命令从搜索路径中删除数据集
#如果不给出参数,那么位于第二位置的数据集将被删除
detach()
search()
##  [1] ".GlobalEnv"        "package:ISwR"      "package:methods"  
##  [4] "package:stats"     "package:graphics"  "package:grDevices"
##  [7] "package:utils"     "package:datasets"  "Autoloads"        
## [10] "package:base"

2.1.8 subset,transform和within

#可以附加一个数据框,从而避免对其中每一个变量的繁琐的索引
#然而,这对于选择数据子集以及用变化变量创建新的数据框却少有帮助
#有一些函数使得这一操作变得简单,如:
#在此处用到subset和transform函数,这里只利用这两个函数的简单功能
#subset函数,从某一个数据框中选择出符合某条件的数据或是相关的列
#transform函数为原数据框添加新的列
thue2 <- subset(thuesen, blood.glucose<7)
thue2
##    blood.glucose short.velocity
## 6            5.3           1.49
## 11           6.7           1.25
## 12           5.2           1.19
## 15           6.7           1.52
## 17           4.2           1.12
## 22           4.9           1.03
#transform函数中的=符号并不是赋值,而是表示名称
thue3 <- transform(thuesen,log.gluc=log(blood.glucose))
thue3
##    blood.glucose short.velocity log.gluc
## 1           15.3           1.76 2.727853
## 2           10.8           1.34 2.379546
## 3            8.1           1.27 2.091864
## 4           19.5           1.47 2.970414
## 5            7.2           1.27 1.974081
## 6            5.3           1.49 1.667707
## 7            9.3           1.31 2.230014
## 8           11.1           1.09 2.406945
## 9            7.5           1.18 2.014903
## 10          12.2           1.22 2.501436
## 11           6.7           1.25 1.902108
## 12           5.2           1.19 1.648659
## 13          19.0           1.95 2.944439
## 14          15.1           1.28 2.714695
## 15           6.7           1.52 1.902108
## 16           8.6             NA 2.151762
## 17           4.2           1.12 1.435085
## 18          10.3           1.37 2.332144
## 19          12.5           1.19 2.525729
## 20          16.1           1.05 2.778819
## 21          13.3           1.32 2.587764
## 22           4.9           1.03 1.589235
## 23           8.8           1.12 2.174752
## 24           9.5           1.70 2.251292
#transform函数的替代方法有一种是within函数,用法如下:
thue4 <- within(thuesen,{
  log.gluc <- log(blood.glucose)
  m <- mean(log.gluc)
  centered.log.gluc <- log.gluc - m
  rm(m)
})
thue4
##    blood.glucose short.velocity centered.log.gluc log.gluc
## 1           15.3           1.76       0.481879807 2.727853
## 2           10.8           1.34       0.133573113 2.379546
## 3            8.1           1.27      -0.154108960 2.091864
## 4           19.5           1.47       0.724441444 2.970414
## 5            7.2           1.27      -0.271891996 1.974081
## 6            5.3           1.49      -0.578266201 1.667707
## 7            9.3           1.31      -0.015958621 2.230014
## 8           11.1           1.09       0.160972087 2.406945
## 9            7.5           1.18      -0.231070001 2.014903
## 10          12.2           1.22       0.255462930 2.501436
## 11           6.7           1.25      -0.343865495 1.902108
## 12           5.2           1.19      -0.597314396 1.648659
## 13          19.0           1.95       0.698465958 2.944439
## 14          15.1           1.28       0.468721722 2.714695
## 15           6.7           1.52      -0.343865495 1.902108
## 16           8.6             NA      -0.094210818 2.151762
## 17           4.2           1.12      -0.810888496 1.435085
## 18          10.3           1.37       0.086170874 2.332144
## 19          12.5           1.19       0.279755623 2.525729
## 20          16.1           1.05       0.532846250 2.778819
## 21          13.3           1.32       0.341791014 2.587764
## 22           4.9           1.03      -0.656737817 1.589235
## 23           8.8           1.12      -0.071221300 2.174752
## 24           9.5           1.70       0.005318777 2.251292

2.2 作图系统

2.2.1 图形布局

x <- runif(50, 0, 2)
y <- runif(50, 0, 2)
plot(x, y, main = "Main title", sub = "subtitle",
     xlab = "x-label", ylab = "y-label")
#可以在绘图区域放置点和线
#可以在plot函数中设定
#或者用points和lines添加
#也可以添加如下命令
text(0.6, 0.6, "text at (0.6, 0.6)")
abline(h=.6, v=.6)
#调用abline仅是表明文本如何以点(0.6,0.6)为中心的
#通常,给定a和b后,abline绘制直线y=a+bx
#边界坐标由mtext函数使用
#for循环将数字-1到4放置在每条边界线的0.7位置
for(side in 1:4) mtext(-1:4, side = side, at=.7, line=-1:4)
#接下来的调用在每个边界放置一个标签,给出边的数字,font=2表示使用粗体
mtext(paste("side", 1:4), side = 1:4, line = -1, font = 2)

2.2.2 利用部分构造图形

#下面的命令绘制完全空白的图形
#type="n"使得点不被绘制,axes=F删掉坐标轴以及图周围的方框
#x,y的标题标签被设置成空字符串
plot(x, y, type = "n", xlab = "", ylab = "", axes = F)
#添加图形元素
#第二个axis调用如何制定了小十字符(和标签)的替换
points(x,y)
axis(1)
axis(2, at=seq(0.2, 1.8, 0.2))
box()
title(main = "Main title", sub = "subtitle",
      xlab = "x-label", ylab = "y-label")

2.2.3 par的使用

  1. par函数可以对图的细节进行非常精细的控制
  2. par设置润徐控制线宽和类型、字符大小和字体、颜色、坐标轴的类型、图形图标区域的大小、图形的裁剪等
  3. 利用mfrow和mfcol参数可以把一个图分成几个子图

2.2.4 组合图形

#如果希望把一个元素一起放在同一张图的时候,就会产生一些特殊的要求
#比如,为直方图添加一个正态密度函数
#hist中的freq=F参数保证了直方图是根据比例而不是绝对数值画出来的
#curve函数画出一个表达式(根据x),add=T润徐它叠加到已有的图上
#但这样的还不够好
x <- rnorm(100)
hist(x, freq = F)
curve(dnorm(x), add = T)

#解决方案
#首先确定两个图形元素的y值的大小,然后使图形足够大到涵盖这两个值
h <- hist(x, plot = F)
ylim <- range(0, h$density, dnorm(0))
hist(x, freq = F, ylim = ylim)
curve(dnorm(x), add = T)

Avatar
Dr.二哈
在读苦逼科研狗

研究方向:脂质营养,业余时间自学R。