#r #rgdal
#r #rgdal
Вопрос:
Я новичок в R. Недавно я бессознательно обновил R на своем компьютере с 4.0.2 на 4.0.3. После того, как я успешно заменил более старый на 4.0.3 и снова установил все связанные пакеты, я в конце концов понял, что мои команды, написанные в версии 4.0.2, не работают в среде 4.0.3. (Мой заклятый враг, должно быть, знаком вам всем, но, к сожалению, я узнал правду слишком недавно) Вот мои проблемы. Во-первых, если команды несовместимы между версиями, какая из них может быть причиной, обновленный пакет или обновленный R? Во-вторых, как и где я / вы можете изменить коды для обновления?
Что я делал, так это читал шейп-файл Taiwan для карт. И вот несовместимые коды, которые все написаны в формате R 4.0.2:
Shapefile <- readOGR(dsn = "directory", layer = "Popn_TWN2")
### Warning message:
In OGRSpatialRef(dsn, layer, morphFromESRI = morphFromESRI, dumpSRS = dumpSRS, :
Discarded datum Taiwan_Datum_1997 in CRS definition: proj=tmerc lat_0=0 lon_0=121 k=0.9999 x_0=250000 y_0=0 ellps=GRS80 towgs84=0,0,0,0,0,0,0 units=m no_defs
Второй: («таблица» представляет собой фрейм данных с географическими данными и будет преобразована в ту же систему координат, что и шейп-файл выше)
assign("table", spTransform(tableData, CRS(" proj=tmerc lat_0=0 lon_0=121 k=0.9999 x_0=250000 y_0=0 ellps=GRS80 towgs84=0,0,0,0,0,0,0 units=m no_defs")))
### Warning message:
In showSRID(uprojargs, format = "PROJ", multiline = "NO", prefer_proj = prefer_proj) :
Discarded datum Unknown based on GRS80 ellipsoid in CRS definition
И последний, который предназначен для подсчета количества перекрытий таблицы в шейп-файле:
assign("over", table(over(table, Shapefile)$TOWN))
### Error in .local(x, y, returnList, fn, ...) :
identicalCRS(x, y) is not TRUE
Итак, то, что я ищу, — это выявление ошибок среди команд и возможных решений. Пожалуйста, скажите мне, недостаточно ли моего описания.
Комментарии:
1. Похоже, что каждое предупреждение или ошибка связаны с
readOGR
неправильной интерпретацией CRS шейп-файла. Это изменение вrgdal
пакете, а не в самом R, но вы также можете проверить список изменений между версиями R на R News , чтобы узнать больше о том, что меняется между версиями.2. Добро пожаловать в StackOverflow. Я думаю, вы путаете обновление R (само по себе, вероятно, будет иметь небольшой побочный эффект) с обновлением всех установленных вами пакетов , поскольку проблема здесь явно связана с одним из пакетов. Который вы могли бы обновить без обновления R, короче говоря, я думаю, что у вас есть ошибка ванили в одном пакете, и вам следует переориентировать свой вопрос на это.
3. Обновление этого вопроса. Я решил проблему (особенно последнюю), преобразовав proj4string как таблицы, так и шейп-файла, что делает два файла готовыми к переопределению. Ссылка
Ответ №1:
Чтобы этого не происходило при обновлении R, вы можете использовать пакет groundhog, который делает вызовы для загрузки пакета R зависящими от версии (поэтому используйте groundhog.library(,) вместо library()
Например,
library('grounhdog')
groundhog.library('rgdal', '2020-10-11')
всегда будет загружаться одна и та же версия ‘rgdal’, которая была актуальна в 2020-10-11, даже при установке новой версии R. Вы, конечно, можете обновить ‘rgdal’, просто изменив дату, использованную для его загрузки в groundhog.команда library(). Если вы понимаете, что обновление нарушает ваш код, вы можете просто вернуться к предыдущей версии, сохранив старую дату, или использовать groundhog, чтобы найти источник проблемы и соответствующим образом обновить свой код.
Подробнее на http://groundhogr.com