Не использовать имена столбцов при чтении файлов .xls с помощью RODBC

У меня есть еще одна загадочная проблема.

Мне нужно прочитать файлы .xls с помощью RODBC. В основном мне нужна матрица всех ячеек на одном листе, а затем использовать greps и strsplits и т. д., чтобы получить данные. Поскольку каждый лист содержит несколько таблиц в разном порядке и некоторые текстовые поля с другими параметрами между ними, мне нужно что-то, что работает как readLines(), но затем для листов Excel. Я считаю, что RODBC лучший способ сделать это.

Ядром моего кода является следующая функция:

.read.info.default <- function(file,sheet){
    fc <- odbcConnectExcel(file)    # file connection
    tryCatch({
      x <- sqlFetch(fc,
                    sqtable=sheet,
                    as.is=TRUE,
                    colnames=FALSE,
                    rownames=FALSE
           )
      },
      error = function(e) {stop(e)},
      finally=close(fc)
    )

    return(x)
}

Тем не менее, что бы я ни пытался, он всегда принимает первую строку упомянутого листа в качестве имен переменных возвращаемого фрейма данных. Без понятия, как это решить. Согласно документации, colnames=FALSE должен предотвратить это.

Я бы хотел избежать пакета xlsReadWrite. Изменить: и пакет gdata. У клиента нет Perl в системе, и он не будет его устанавливать.


Редактировать:

Я сдался и пошел с read.xls() из пакета xlsReadWrite. Помимо проблемы с именем, оказалось, что RODBC не может читать ячейки со специальными знаками, такими как косая черта. А дату в формате "дд/мм/гггг" как раз давал NA.

Глядя на исходный код sqlFetch, sqlQuery и sqlGetResults, я понял, что проблема, скорее всего, в драйверах. Почему-то первая строка листа видится как некая функция столбца, а не обычная ячейка. Таким образом, вместо имен столбцов они эквивалентны именам полей БД. И это опция, которую вы не можете установить...


person Joris Meys    schedule 18.11.2010    source источник
comment
У меня тоже была эта проблема. Я справился с этим, написав постфактум код манипуляции, чтобы удалить фиктивные данные и переименовать столбцы.   -  person Brandon Bertelsen    schedule 18.11.2010
comment
@ Брэндон: Я тоже так делал, но все равно облом, я должен делать это таким образом.   -  person Joris Meys    schedule 18.11.2010


Ответы (1)


Можно ли вместо этого использовать решение на основе Perl в gdata? Он ведь тоже портативный...

person Dirk Eddelbuettel    schedule 18.11.2010
comment
Увы, помните тот клиент, где мне даже нужно было убедиться, что R не нужно подключаться к Интернету? Ни в коем случае они не позволят мне добавить Perl в набор... - person Joris Meys; 18.11.2010
comment
Вызов блефа. Excel тоже может --- так что кого это волнует. Время, чтобы получить более умных клиентов? - person Dirk Eddelbuettel; 18.11.2010
comment
должен быть осторожен с тем, что я говорю здесь, но давайте остановимся на небольшом разногласии между мной и старшим профессором по задачам академического статистического консультанта. Кроме того, я надеюсь убедить их действительно ИСПОЛЬЗОВАТЬ базу данных, которая у них есть. Вот сейчас эксель-листы оттуда тянут, представьте. фейспалм - person Joris Meys; 18.11.2010