../_images/logo_R.png

R Quickstart

R是一个免费的统计计算和图形软件环境。

此快速入门介绍了如何:

  • 简单算术使用r
  • 从形状文件加载一些数据并对其进行映射
  • 进行坐标转换
  • 在地图上绘制一些数据点

启动R

R本质上是一个命令行程序,尽管图形用户界面是可用的。在提示下键入一行代码,按回车键,R解释器将对其进行评估并打印结果。

小技巧

不要害怕命令行-它是强大力量的源泉。使用上下箭头调用命令,以便编辑错误。如果卡住了,请按CTRL-C,您应该会得到提示。

选择 Geospatial ‣ Spatial Tools ‣ R Statistics . 一个终端窗口打开运行R。

你可以从简单的算术开始。

> 3*2
[1] 6

> 1 + 2 * 3 / 4
[1] 2.5

> sqrt(2)
[1] 1.414214

> pi * exp(-1)
[1] 1.155727

内置了全套的算术、三角函数和统计函数,并且在 CRAN 档案文件。

R中的主要提示是 > ,但也有继续提示 + ,如果r需要更多的输入来生成有效的表达式,则会出现此消息。如果忘记了右括号或圆括号,就会看到这个。

> sqrt(
+ 2
+ )
[1] 1.414214

建筑数据

您可能想知道方括号中神秘的“one”在输出中做了什么。这告诉你结果是一个数字。R可以将事物存储在一维向量、二维矩阵和多维数组中。有许多函数可以生成这些内容。下面是一个简单的序列:

> seq(1, 5, len=10)
[1] 1.000000 1.444444 1.888889 2.333333 2.777778 3.222222 3.666667 4.111111
[9] 4.555556 5.000000

现在你可以看到 [9] 告诉我们4.555是向量中的第九个值。

如果构造矩阵,将得到行和列标签:

> m = matrix(1:12, 3, 4)
> m
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12

矩阵的元素可以用方括号提取,行和列的索引用逗号分隔。保留一个索引为空将整行作为向量。使用矢量索引将多个行或列作为较小的矩阵:

> m[2,4]
[1] 11

> m[2,]
[1]  2  5  8 11

> m[,3:4]
     [,1] [,2]
[1,]    7   10
[2,]    8   11
[3,]    9   12

数据帧是反映RDBMS(如Postgres或MySQL)中的结构类型的数据结构。每一行都可以看作一条记录,列就像数据库中的字段。在数据库中,每个字段对于每个记录都必须是相同的类型。

在许多方面,它们的工作方式类似于矩阵,但您也可以使用$-符号按名称获取和设置列:

> d = data.frame(x=1:10, y=1:10, z=runif(10)) # z is 10 random numbers
> d
        x  y          z
    1   1  1 0.44128080
    2   2  2 0.09394331
    3   3  3 0.51097462
    4   4  4 0.82683828
    5   5  5 0.21826740
    6   6  6 0.65600533
    7   7  7 0.59798278
    8   8  8 0.19003625
    9   9  9 0.24004866
    10 10 10 0.35972749

> d$z
 [1] 0.44128080 0.09394331 0.51097462 0.82683828 0.21826740 0.65600533
 [7] 0.59798278 0.19003625 0.24004866 0.35972749

> d$big = d$z > 0.6  # d$big is now a boolean true/false value
> d[1:5,]
  x y          z   big
1 1 1 0.44128080 FALSE
2 2 2 0.09394331 FALSE
3 3 3 0.51097462 FALSE
4 4 4 0.82683828  TRUE
5 5 5 0.21826740 FALSE

> d$name = letters[1:10] # create a new field of characters
> d[1:5,]
  x y          z   big name
  1 1 1 0.44128080 FALSE    a
  2 2 2 0.09394331 FALSE    b
  3 3 3 0.51097462 FALSE    c
  4 4 4 0.82683828  TRUE    d
  5 5 5 0.21826740 FALSE    e

正在加载地图数据

有许多用于空间数据操作和统计的包。有些包含在这里,有些可以从cran下载。

在这里,我们将从自然地球数据中加载两个形状文件——国家边界和人口密集的地方。我们使用两个附加包来获得空间功能:

> library(sf)           # Simple Features manipulation Library
> library(ggplot2)      # Plotting library

> countries <- st_read(dsn = "~/data/natural_earth2/ne_10m_admin_0_countries.shp")
> places <- st_read(dsn = "~/data/natural_earth2/ne_10m_populated_places.shp")
> ggplot(countries) + geom_sf()

这给了我们一张简单的世界地图:

../_images/r_plot1.png

当一个OGR数据集以这种方式被读取到R中时,我们会得到一个对象,它的行为在很多方面类似于一个数据帧。我们可以使用 admin 字段,用于子集世界数据并获取英国:

> uk <- countries[countries$admin == 'United Kingdom',]
> ggplot(uk) + geom_sf()
../_images/r_plot2.png

对于任何住在这里的人来说,这看起来都有点被压扁了,因为我们更熟悉以纬度为中心的坐标系。当前对象没有指定坐标系。

我们需要为对象分配一个CRS,然后才能使用sf包中的sf::st_转换函数对其进行转换。我们转换为EPSG:27700,这是大不列颠电网系统的军械调查:

> ukos <- st_transform(uk,27700)
> ggplot(ukos) + geom_sf()
../_images/r_plot2_1.png

这将绘制转换数据的基础图。现在,我们要从填充的位置数据集中添加一些点。再次,我们将需要的点子集,并将其转换为军械测量网格参考坐标:

> ukpop <- places[places$SOV0NAME == 'United Kingdom',]
> ukpop <- st_transform(ukpop,27700)

我们将这些点添加到基础图中,通过按比例缩放的总体平方根来缩放它们的大小(因为这会使面积与总体成比例的符号),将颜色设置为红色,并将绘图字符设置为实心斑点:

> ggplot() +
>   geom_sf(data = ukos) +                                                          # add UK shape to the map
>   geom_sf(data = ukpop,                                                           # add the Populated places
>           aes(size = ukpop$POP_MAX/100000),                       # fix size of points (by area)
>           colour = 'red', alpha = 1/5) +                          # set points colour and transparency
>   coord_sf(crs = 27700, datum= sf::st_crs(27700),         # set a bounding box
>            xlim = st_bbox(ukos[c(1,3)]),                          # for the map
>            ylim = st_bbox(ukos[c(2,4)])
>           ) +
>   ggtitle('Uk Population centre sizes') +                         # set the map title
>       theme(legend.position = 'bottom') +                         # Legend position
>           scale_size_area(name = 'Population \nin 100K')  # 0 value means 0 area + legend title

最后的图像出现了:

../_images/r_plot3.png

小技巧

要退出R,请键入 q() 然后按回车键。R将询问您是否要将工作区另存为R数据 Mapfile 。当您从一个目录再次启动R时 .RData 文件,它将从那里恢复所有数据。

小饰物

过去,R包的文档往往是为每个函数编写的简明的帮助页。现在,我们鼓励软件包作者写一篇“小插曲”,作为对软件包的友好介绍。如果你运行 vignette() 函数不带参数,您将获得系统中这些小片段的列表。尝试 vignette("sf1") 关于R空间包的一些技术介绍。

接下来呢?

有关r的一般信息,请咨询官方 Introduction to R 或任何主要文件 R Project 页。

有关r的空间方面的更多信息,最好从 R Spatial Task View

您也可以查看 R-Spatial 页。