believeNRows = ЛОЖЬ, кажется, ключ.Лучше всего использовать его при открытии соединения:
db <- odbcConnect (dsn = "testdsn", uid = "testuser", pwd = "testpasswd", believeNRows = FALSE) </p>
При тестировании с isql из unixODBC он сообщает, что SQLRowCount равен 4294967295 (даже если есть только одна строка) в 64-битной Linux, а в 32-битной Linux - -1.Вероятно, это оптимизация, поскольку она позволяет быстрее получать ответы.Это экономит базу данных немедленного получения полного набора данных ответов.Например, может быть много записей, в то время как будут выбраны только первые несколько попаданий.
4294967295 равен (2 ^ 32) -1, что является максимальным значением для беззнакового целого, но будет трактоваться как -1с подписанным инт.При этом R жалуется на вектор с отрицательной длиной.Поэтому я предполагаю, что это проблема целого числа со знаком и без знака (или размера (длинного) между 32 и 64 битами).
Настройка believeNRows = FALSE решила проблему для меня, поэтому я могу использовать один и тот же код R в обеих системах.
Кстати: я использую R 2.10.1, RODBC 1.3.2, unixODBC2.3.0 с Oracle 10.2.0.4 в Linux 64 бит.Обязательно используйте
export CFLAGS = "- DBUILD_REAL_64_BIT_MODE -DSIZEOF_LONG = 8 -fshort-wchar"
при выполнении настройки для unixODBC, поскольку драйвер Oracle ODBC ожидает REAL_64_BITMне LEGACY_64_BIT_MODE.
И помните о проблемах интернационализации: R использует $ LANG, а Oracle использует $ NLS_LANG.
У меня возникли проблемы с UTF8, поэтому я использую, например,
LANG = en_US;NLS_LANG = American_America