Как бороться с проблемами в командах, вызванными обновлением версии R?

#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