Невозможно воспроизвести тестовое предупреждение, включающее sp :: writeOGR: «NA введены по принуждению» - PullRequest
0 голосов
/ 17 июня 2019

У меня есть пакет с функцией, которая записывает некоторые пространственные объекты во временный файл.Это заставляет мои тесты выдавать предупреждение: NAs introduced by coercion, что я не смог воспроизвести вручную.

Любопытно, что предупреждение возникает со строками или полигонами, но не с точками.

ВотМинимальный воспроизводимый пример:

  1. Создать фиктивный пакет: usethis::create_package("dummypkg")

  2. Создать функцию: usethis::use_r("writetmp.R") со следующим содержанием:

writetmp <- function(type) {

  if (type == "line") {
    x <- sp::SpatialLines(
      list(sp::Lines(sp::Line(cbind(
        c(1, 9), c(8, 2)
      )), "Line")), proj4string = sp::CRS("+proj=longlat")
    )
  } else {
    x <- sp::SpatialPoints(
      cbind(c(3, 7), c(3, 3)), proj4string = sp::CRS("+proj=longlat")
    )
  }
  x$dummy <- seq.int(length(x))

  t_x <- tempfile(file = ".gpkg")

  rgdal::writeOGR(
    x,
    t_x,
    layer = "x",
    driver = "GPKG"
  )

  return(t_x)
}
Создать тест: usethis::use_test("writetmp") со следующим содержанием:
test_that("writetmp writes a line to a temporary file", {

  ans <- expect_error(writetmp("line"), NA)
  ans <- expect_error(writetmp("point"), NA)
})
Убедитесь, что вызов функции работает, как и ожидалось, без каких-либо предупреждений, но в рамках тестов выдает предупреждение для типа "line":
library(sp)
library(testthat)
devtools::load_all()

writetmp("line")  # OK

writetmp("point")  # OK

test()

## Loading dummypkg
## Testing dummypkg
## ✔ |  OK F W S | Context
## ✔ |   2   1   | writetmp
## ──────────────────────────────────────────────────────────────────────────
## test-writetmp.R:3: warning: writetmp writes a line to a temporary file
## NAs introduced by coercion
## ────────────────────────────────────────────────────────────────────────────
## ══ Results 
## ════════════════════════════════════════════════════════════════════════════## OK:       2
## Failed:   0
## Warnings: 1
## Skipped:  0

Я хочу понять, почему это предупреждениепроизводится для того, чтобы это исправить.

...