R:SpatialPointsDataFrame 代码不再有效。 !res[[1]] 中的错误:参数类型无效
R: SpatialPointsDataFrame code no longer working. Error in !res[[1]] : invalid argument type
我一直在关注 this workflow 在 R 中将坐标从 Eastings / Northings 转换为 Latitude / Longitude。直到今天它一直运行良好。这是一个可重现的例子:
require(rgdal)
# create test coordinates
x <- 259269 y <- 074728
# create test dataframe
dat <- data.frame(x, y)
class(dat) # "data.frame"
### shortcuts
ukgrid <- "+init=epsg:27700"
latlong <- "+init=epsg:4326"
### Create coordinates object
coords <- cbind(Easting = as.numeric(as.character(x)),
Northing = as.numeric(as.character(y)))
class(coords) # matrix
dat_SP <- SpatialPointsDataFrame(coords,
data = dat,
proj4string = CRS("+init=epsg:27700"))
# Error in !res[[1]] : invalid argument type
# Following steps ----
# Convert
dat_SP_LL <- spTransform(dat_SP, CRS(latlong)
# replace Lat, Long
dat_SP_LL@data$Long <- coordinates(dat_SP_LL)[, 1]
dat_SP_LL@data$Lat <- coordinates(dat_SP_LL)[, 2]
我认为这可能与proj4string参数有关,但一直无法解决。感谢任何帮助。
我的会话信息:
> sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18362)
Matrix products: default
locale:
[1] LC_COLLATE=English_United Kingdom.1252 LC_CTYPE=English_United Kingdom.1252
[3] LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C
[5] LC_TIME=English_United Kingdom.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] forcats_0.5.0 stringr_1.4.0 dplyr_0.8.3 purrr_0.3.3
[5] readr_1.3.1 tibble_3.0.1 tidyverse_1.3.0 ggspatial_1.1.2
[9] tmap_3.0 rnrfa_2.0.3 gdalUtils_2.0.3.2 zoon_0.6.5
[13] biomod2_3.4.6 sdm_1.0-89 SDMTools_1.1-221.1 SSDM_0.2.8
[17] odbc_1.2.2 DBI_1.1.0 rgeos_0.5-3 rgdal_1.5-8
[21] tidyr_1.1.0 ggplot2_3.3.1 knitr_1.25 raster_3.0-7
[25] sp_1.3-1
我遇到了同样的问题。它来自 CRS
函数。如果您查看它来自第 34 行的函数(我在下面的代码中用星号标记),但我不知道如何修复它。这可能是一个错误。我写这个"answer"主要是为了引起大家的注意,我没有资格评论
编辑:您可以在CRS
函数中设置doCheckCRSArgs = F
,但当我尝试spTransform
时仍然出现错误。
source crs creation failed: generic error of unknown origin
function (projargs = NA_character_, doCheckCRSArgs = TRUE)
{
if (!is.na(projargs) && !nzchar(projargs))
projargs <- NA_character_
stopifnot(is.logical(doCheckCRSArgs))
stopifnot(length(doCheckCRSArgs) == 1L)
stopifnot(is.character(projargs))
if (!is.na(projargs)) {
if (length(grep("^[ ]*\+", projargs)) == 0)
stop(paste("PROJ4 argument-value pairs must begin with +:",
projargs))
}
if (!is.na(projargs)) {
if (length(grep("latlon", projargs)) != 0)
stop("northings must follow eastings: ", projargs)
if (length(grep("lonlat", projargs)) != 0) {
projargs <- sub("lon", "long", projargs)
warning("'lonlat' changed to 'longlat': ", projargs)
}
}
if (is.na(projargs))
uprojargs <- projargs
else uprojargs <- paste(unique(unlist(strsplit(projargs,
" "))), collapse = " ")
if (length(grep("= ", uprojargs)) != 0)
stop(paste("No spaces permitted in PROJ4 argument-value pairs:",
uprojargs))
if (length(grep(" [:alnum:]", uprojargs)) != 0)
stop(paste("PROJ4 argument-value pairs must begin with +:",
uprojargs))
if (doCheckCRSArgs) {
if (!is.na(uprojargs) && requireNamespace("rgdal", quietly = TRUE)) {
res <- rgdal::checkCRSArgs(uprojargs)
********if (!res[[1]])*********
stop(res[[2]])
uprojargs <- res[[2]]
}
}
res <- new("CRS", projargs = uprojargs)
res
}
我遇到了同样的问题。该错误与 sp::CRS 有关。我通过重新安装 'sp' 包解决了这个问题。
我一直在关注 this workflow 在 R 中将坐标从 Eastings / Northings 转换为 Latitude / Longitude。直到今天它一直运行良好。这是一个可重现的例子:
require(rgdal)
# create test coordinates
x <- 259269 y <- 074728
# create test dataframe
dat <- data.frame(x, y)
class(dat) # "data.frame"
### shortcuts
ukgrid <- "+init=epsg:27700"
latlong <- "+init=epsg:4326"
### Create coordinates object
coords <- cbind(Easting = as.numeric(as.character(x)),
Northing = as.numeric(as.character(y)))
class(coords) # matrix
dat_SP <- SpatialPointsDataFrame(coords,
data = dat,
proj4string = CRS("+init=epsg:27700"))
# Error in !res[[1]] : invalid argument type
# Following steps ----
# Convert
dat_SP_LL <- spTransform(dat_SP, CRS(latlong)
# replace Lat, Long
dat_SP_LL@data$Long <- coordinates(dat_SP_LL)[, 1]
dat_SP_LL@data$Lat <- coordinates(dat_SP_LL)[, 2]
我认为这可能与proj4string参数有关,但一直无法解决。感谢任何帮助。
我的会话信息:
> sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18362)
Matrix products: default
locale:
[1] LC_COLLATE=English_United Kingdom.1252 LC_CTYPE=English_United Kingdom.1252
[3] LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C
[5] LC_TIME=English_United Kingdom.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] forcats_0.5.0 stringr_1.4.0 dplyr_0.8.3 purrr_0.3.3
[5] readr_1.3.1 tibble_3.0.1 tidyverse_1.3.0 ggspatial_1.1.2
[9] tmap_3.0 rnrfa_2.0.3 gdalUtils_2.0.3.2 zoon_0.6.5
[13] biomod2_3.4.6 sdm_1.0-89 SDMTools_1.1-221.1 SSDM_0.2.8
[17] odbc_1.2.2 DBI_1.1.0 rgeos_0.5-3 rgdal_1.5-8
[21] tidyr_1.1.0 ggplot2_3.3.1 knitr_1.25 raster_3.0-7
[25] sp_1.3-1
我遇到了同样的问题。它来自 CRS
函数。如果您查看它来自第 34 行的函数(我在下面的代码中用星号标记),但我不知道如何修复它。这可能是一个错误。我写这个"answer"主要是为了引起大家的注意,我没有资格评论
编辑:您可以在CRS
函数中设置doCheckCRSArgs = F
,但当我尝试spTransform
时仍然出现错误。
source crs creation failed: generic error of unknown origin
function (projargs = NA_character_, doCheckCRSArgs = TRUE)
{
if (!is.na(projargs) && !nzchar(projargs))
projargs <- NA_character_
stopifnot(is.logical(doCheckCRSArgs))
stopifnot(length(doCheckCRSArgs) == 1L)
stopifnot(is.character(projargs))
if (!is.na(projargs)) {
if (length(grep("^[ ]*\+", projargs)) == 0)
stop(paste("PROJ4 argument-value pairs must begin with +:",
projargs))
}
if (!is.na(projargs)) {
if (length(grep("latlon", projargs)) != 0)
stop("northings must follow eastings: ", projargs)
if (length(grep("lonlat", projargs)) != 0) {
projargs <- sub("lon", "long", projargs)
warning("'lonlat' changed to 'longlat': ", projargs)
}
}
if (is.na(projargs))
uprojargs <- projargs
else uprojargs <- paste(unique(unlist(strsplit(projargs,
" "))), collapse = " ")
if (length(grep("= ", uprojargs)) != 0)
stop(paste("No spaces permitted in PROJ4 argument-value pairs:",
uprojargs))
if (length(grep(" [:alnum:]", uprojargs)) != 0)
stop(paste("PROJ4 argument-value pairs must begin with +:",
uprojargs))
if (doCheckCRSArgs) {
if (!is.na(uprojargs) && requireNamespace("rgdal", quietly = TRUE)) {
res <- rgdal::checkCRSArgs(uprojargs)
********if (!res[[1]])*********
stop(res[[2]])
uprojargs <- res[[2]]
}
}
res <- new("CRS", projargs = uprojargs)
res
}
我遇到了同样的问题。该错误与 sp::CRS 有关。我通过重新安装 'sp' 包解决了这个问题。