小编esp*_*lli的帖子

在程序包加载/卸载时加载/删除用户定义的单元:最佳做法?

在我正在开发的包中,我需要定义一个新单元:飞行高度(FL)相当于100英尺.

units包提供以下可能性:

units::install_conversion_constant("FL", "ft", 100)
Run Code Online (Sandbox Code Playgroud)

为了使包test(devtools::test())和包check(devtools::test())都能使用这个用户定义的单元进行单元测试,我发现我需要在包加载阶段注册它.

这是我做的:

zzz.R(一个新的文件,按照"当你需要的副作用"一节):

# register flight levels (FL) as a unit when loading this package
.onLoad <- function(libname, pkgname) {
  # install user-define unit for flight level
  units::install_conversion_constant("FL", "ft", 100)

  invisible()
}

# register flight levels (FL) as a unit when loading this package
.onUnload <- function(libname, pkgname) {
  # uninstall user-define unit for flight level
  units::remove_symbolic_unit("FL")

  invisible()
}
Run Code Online (Sandbox Code Playgroud)

如果不这样做并将单元注册码放在某个R/unit-conversion.R …

r units-of-measurement r-package

11
推荐指数
1
解决办法
162
查看次数

ggplot2(和sf)中世界地图的全地球多边形

在绘制世界地图时,存在以下问题ggplot2:它使用相同的颜色为整个背景着色,包括实际上不是地球的一部分的绘图角落,请参阅下面的代码生成的快照(它使用了蒙太边缘)sfabd ggplot2版本但问题是通用的,请参阅下面提到的博客文章:

    #install.packages("devtools")
    #devtools::install_github("tidyverse/ggplot2")
    #devtools::install_github("edzer/sfr")

    library(ggplot2)
    library(sf)
    library(rnaturalearth)
    library(dplyr)

    theme_map <- function(...) {
      theme_minimal() +
      theme(
        text = element_text(family = "Ubuntu Regular", color = "#22211d"),
        axis.line = element_blank(),
        axis.text.x = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks = element_blank(),
        axis.title.x = element_blank(),
        axis.title.y = element_blank(),
        panel.grid.minor = element_line(color = "#ebebe5", size = 0.2),
        panel.grid.major = element_line(color = "#ebebe5", size = 0.2),
        plot.background = element_rect(fill = "#f5f5f2", color = NA),
        panel.background = element_rect(fill = "#f5f5f2", color = NA), …
Run Code Online (Sandbox Code Playgroud)

gis r ggplot2 r-sf

7
推荐指数
1
解决办法
1041
查看次数

使用st_buffer围绕地理点圈出

我想使用sf包裹在都柏林机场附近绘制一个110海里(海里)的圆圈.(稍后我将通过st_intersectADS-B的航班位置报告与之相交.)

我为NM定义了一个新单元如下:

library(units)
library(tidyverse)
library(sf)
NM <- make_unit("NM")
install_conversion_constant("NM", "km", 1.852)
Run Code Online (Sandbox Code Playgroud)

然后定义都柏林机场坐标:

# DUB/EIDW location, see 
# https://skyvector.com/airport/EIDW/Dublin-Airport
# Coordinates:
#   N53°25.28' / W6°16.20' (Degrees Decimal Minutes (DDM) format)
#   (-6.27, 53.421333) (lon/lat Decimal Degrees (DD))
# Elevation: 242.0 feet (MSL)
dub_lon <- -6.27
dub_lat <- 53.421333
dub_elv <- set_units(242.0, ft)

dub <- st_point( x = c(dub_lon, dub_lat, dub_elv), dim = "XYZ")
dub <- dub %>% st_sfc(crs = 4326)
Run Code Online (Sandbox Code Playgroud)

因此,定义了机场周围的圆的半径(以米为单位):

r110 <- set_units(110, NM) %>% set_units(km) …
Run Code Online (Sandbox Code Playgroud)

r r-sf

7
推荐指数
2
解决办法
3886
查看次数

标签 统计

r ×3

r-sf ×2

ggplot2 ×1

gis ×1

r-package ×1

units-of-measurement ×1