我一直在R(4.3.0)中的terra R package(v1.7-29)崩溃中遇到project function。这是通过终端和RStudio发生的,尽管terra
包安装没有错误。
Reprex:
library(terra)
# SPECIFY PROJECTIONS
pt.proj <- "+proj=longlat +datum=WGS84"
calc.proj <-
"+proj=aea + lat_1=14.5 + lat_2=32.5 + lat_0=24.0 + lon_0=-105 +x_0=0 +y_0=0 + ellps =GRS80 +datum=NAD83 + units=m +no_defs"
# BUILDING SPATIAL VECTOR
# Fields
ids <- c("id00041130", "id00043728", "id00032757", "id00035604")
spp <- rep("Quercus_aerea", 4)
lats <- c(27.4, 25.1, 26.9, 28.2)
longs <- c(-108, -106, -107, -107)
spat_points <- cbind.data.frame(ids, spp, lats, longs)
# Convert to spatial vector
spat_vect <- vect(spat_points, geom=c("longs", "lats"), crs=pt.proj, keepgeom=FALSE)
# PROJECT FUNCTION (CRASHING)
spat_vect.calc <- project(spat_vect,calc.proj)
# Generates the message:
# "free(): double free detected in tcache 2"
# "Aborted (core dumped)"
会话信息:
> sessionInfo()
R version 4.3.0 (2023-04-21)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.6 LTS
Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/atlas/libblas.so.3.10.3
LAPACK: /usr/lib/x86_64-linux-gnu/atlas/liblapack.so.3.10.3; LAPACK version 3.7.1
因为terra
v1.7-29有一定的system requirements,我用sf::sf_extSoftVersion
检查了这些;一切似乎都得到了满足。
> sf::sf_extSoftVersion()
GEOS GDAL proj.4
"3.6.2" "2.2.3" "4.9.3"
GDAL_with_GEOS USE_PROJ_H PROJ
"true" "false" "4.9.3"
任何关于其他事情的提示,我可以检查与此包,或建议,我如何可以更清楚地诊断问题,将不胜感激。谢谢!
2条答案
按热度按时间cld4siwp1#
我在旧GDAL/PROJ中看到了相同的情况
但是如果您正确地指定了PROJ 4字符串(“+”和关键字之间没有空格),它对我来说是有效的。
这不是较新版本的问题,例如
或者
因此,这似乎是旧版GDAL或PROJ的问题。我会建议获得较新的版本。我将从升级Ubuntu开始,因为您仍在使用版本18.04,即deprecated today(2023年5月31日)。
cpjpxq1n2#
支持@robert-hijamns的建议,即新版本可以更容易。你在这里有一个“存在主义”的冲突:你想要并使用 * 当前的 * R版本4.3.0,但随后将其 * 限制 * 到五年前的操作系统中:Ubuntu 18.04 LTS.
考虑一个约束较少的替代方案:Ubuntu 22.04 LTS.我在这里使用了一个基于22.04 * 和 * 的Rocker容器,由于r2u,它提供了所有CRAN作为二进制文件。
然后,在快速启动
rocker/r2u:22.04
容器和快速apt update -qq; apt upgrade
之后,我们可以执行install.r terra
。这就是魔术发生的地方:r2u
知道terra
等同于r-cran-terra
,它会安装该软件包及其所有的二进制依赖项。而安装所需的56个软件包只需要59秒。然后我可以运行你的脚本,没有segfault:
给予r2u一个机会。它是一个存储库,所以它与服务器,台式机,笔记本电脑,云,CI,...使用。它已经派上用场了,我们几个人已经有一年多了。