У меня есть еще одна загадочная проблема.
Мне нужно читать файлы .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, я понял, что проблема, скорее всего, в драйверах.Каким-то образом первая строка листа видна как элемент столбца вместо обычной ячейки.Таким образом, вместо имен столбцов они эквивалентны именам полей БД.И эту опцию вы не можете установить ...