Загрузка расширения spaceite в RSQLite приводит к сбою R (OS X и Ubuntu)

Я выполняю несколько запросов к базе данных Spatialite и хотел бы получить данные непосредственно в R. R-td7583603.html" rel="nofollow">Эта страница предполагает, что я могу сделать что-то вроде этого:

library(RSQLite)
sqldrv <- dbDriver("SQLite") 
con <- dbConnect(sqldrv, dbname = "/path/to/db.sqlite",loadable.extensions = TRUE)  
spatialitestatus <- dbGetQuery(con, "SELECT load_extension('libspatialite.dylib')")

Но когда я это делаю, R выдает следующее:

 *** caught segfault ***
address 0x0, cause 'memory not mapped'

Traceback:
 1: .Call("RS_SQLite_fetch", rsId, nrec = n, PACKAGE = .SQLitePkgName)
 2: sqliteFetch(rs, n = -1, ...)
 3: sqliteQuickSQL(conn, statement, ...)
 4: dbGetQuery(con, "SELECT load_extension('/usr/local/lib/libspatialite.dylib')")
 5: dbGetQuery(con, "SELECT load_extension('/usr/local/lib/libspatialite.dylib')")

В моем случае spaceite был собран из исходников с использованием Homebrew, как и версия sqlite, которую я обычно использую. В определении libspatialite homebrew говорится, что это зависит от sqlite > 3.7.3. Моя домашняя версия sqlite — 3.7.17.

Я точно не знаю, какая версия sqlite RSQLite загружается по умолчанию, но я предполагаю, что это версия версии 3.7.17, включенная в исходный пакет RSQLite. Я попытался собрать RSQLite из исходного кода, используя install.packages(c("RSQLite"), type="source"), в надежде, что он просто будет использовать мою версию sqlite, но похоже, что это не так. Или, если это так, он все еще падает.

Наконец, я должен упомянуть, что я пробовал это в двух версиях R с одинаковыми результатами:

  • R 3.0.0 скачан в бинарном виде из CRAN
  • R 3.0.1 загружен в виде исходного кода и установлен через доморощенный

ОБНОВИТЬ:

Сбой подтвержден в Ubuntu 13.04 с использованием libspatialite5, предоставленного репозиторием Ubuntu FOSS GIS.


person Peter    schedule 07.08.2013    source источник
comment
Сопровождающий ветки Mac, Саймон Урбанек, рекомендует не использовать MacPorts, Homebrew или Fink для установки внешних пакетов.   -  person IRTFM    schedule 07.08.2013
comment
Что вы подразумеваете под внешними пакетами? Системные библиотеки без R? В случае с spaceite я понятия не имею, где бы я мог скачать готовый двоичный файл. И если бы я собирал из исходников, я бы делал именно то, что делает доморощенный.   -  person Peter    schedule 07.08.2013
comment
Да, если вы предпочитаете системные библиотеки, отличные от R. markmail.org/message/ Насколько я понимаю, проблемы возникают из-за того, что исходники встраиваются не в те каталоги. Вы можете получить более компетентный совет, разместив сообщение в списке рассылки Mac-R.   -  person IRTFM    schedule 07.08.2013
comment
Насколько мне известно, нет какой-либо версии libspatialite, доступной через средства упаковки R.   -  person Peter    schedule 07.08.2013


Ответы (1)


Похоже, что последние версии libspatialite (4.x) проблематичны. Кроме того, загрузка самодельного расширения libspatialite3 работает, но последующие запросы приводили к тому же segfault.

В конце концов, мое (краткосрочное, временное, хакерское) решение состояло в том, чтобы создать пакет R, который компилирует свой собственный пространственный объект и загружает его. RSQLite.spatialite можно найти здесь.

person Peter    schedule 10.08.2013