Я выполняю несколько запросов к базе данных 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.