
R Quickstart¶
R是一个免费的统计计算和图形软件环境。
此快速入门介绍了如何:
- 简单算术使用r
- 从形状文件加载一些数据并对其进行映射
- 进行坐标转换
- 在地图上绘制一些数据点
启动R¶
R本质上是一个命令行程序,尽管图形用户界面是可用的。在提示下键入一行代码,按回车键,R解释器将对其进行评估并打印结果。
小技巧
不要害怕命令行-它是强大力量的源泉。使用上下箭头调用命令,以便编辑错误。如果卡住了,请按CTRL-C,您应该会得到提示。
选择
. 一个终端窗口打开运行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()
这给了我们一张简单的世界地图:

当一个OGR数据集以这种方式被读取到R中时,我们会得到一个对象,它的行为在很多方面类似于一个数据帧。我们可以使用 admin
字段,用于子集世界数据并获取英国:
> uk <- countries[countries$admin == 'United Kingdom',]
> ggplot(uk) + geom_sf()

对于任何住在这里的人来说,这看起来都有点被压扁了,因为我们更熟悉以纬度为中心的坐标系。当前对象没有指定坐标系。
我们需要为对象分配一个CRS,然后才能使用sf包中的sf::st_转换函数对其进行转换。我们转换为EPSG:27700,这是大不列颠电网系统的军械调查:
> ukos <- st_transform(uk,27700)
> ggplot(ukos) + geom_sf()

这将绘制转换数据的基础图。现在,我们要从填充的位置数据集中添加一些点。再次,我们将需要的点子集,并将其转换为军械测量网格参考坐标:
> 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
最后的图像出现了:

小技巧
要退出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 页。