Есть ли способ для fread
, чтобы имитировать поведение read.table
, при котором class
переменной задается с помощью данных, которые читаются.
У меня есть числовые данные с несколькими комментариями под основными данными. Когда я использую fread
для чтения в данных, столбцы преобразуются в символ. Однако, установив nrow
в read.table`, я могу остановить это поведение. Возможно ли это в страхе. (Я бы предпочел не изменять исходные данные или не вносить исправленную копию). Благодаря
Пример
d <- data.frame(x=c(1:100, NA, NA, "fff"), y=c(1:100, NA,NA,NA))
write.csv(d, "test.csv", row.names=F)
in_d <- read.csv("test.csv", nrow=100, header=T)
in_dt <- data.table::fread("test.csv", nrow=100)
Что производит
> str(in_d)
'data.frame': 100 obs. of 2 variables:
$ x: int 1 2 3 4 5 6 7 8 9 10 ...
$ y: int 1 2 3 4 5 6 7 8 9 10 ...
> str(in_dt)
Classes ‘data.table’ and 'data.frame': 100 obs. of 2 variables:
$ x: chr "1" "2" "3" "4" ...
$ y: int 1 2 3 4 5 6 7 8 9 10 ...
- attr(*, ".internal.selfref")=<externalptr>
В качестве обходного решения я подумал, что смогу использовать read.table
для чтения в одной строке, получить класс и установить colClasses
, но я не понимаю.
cl <- read.csv("test.csv", nrow=1, header=T)
cols <- unname(sapply(cl, class))
in_dt <- data.table::fread("test.csv", nrow=100, colClasses=cols)
str(in_dt)
Использование Windows8.1 R 3.1.2 (2014-10-31) Платформа: x86_64-w64-mingw32/x64 (64-разрядная версия)