У меня есть пакет с функцией, которая записывает некоторые пространственные объекты во временный файл.Это заставляет мои тесты выдавать предупреждение: NAs introduced by coercion
, что я не смог воспроизвести вручную.
Любопытно, что предупреждение возникает со строками или полигонами, но не с точками.
ВотМинимальный воспроизводимый пример:
Создать фиктивный пакет: usethis::create_package("dummypkg")
Создать функцию: 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
Я хочу понять, почему это предупреждениепроизводится для того, чтобы это исправить.