Я восстановил файл из здесь (зарегистрирован, загружен, разархивирован, иначе не связывался с содержимым). Как говорит @thelatemail, проблема заключается в Ctrl-Z в последней строке. Один простой способ исправить это - прочитать текст, а затем записать все, кроме последней строки, в исправленный файл:
r0 <- readLines("R10CANCR.DAT")
writeLines(r0[1:(length(r0)-1)],"R10cancrfix.dat")
Однако : я был бы осторожен с теми, кто предложил Fortran формат строки README говорит:
Все поля разделены хотя бы одним пробелом, поэтому файл можно легко прочитать с помощью чтения в произвольном формате FORTRAN.
, что говорит о том, что read.table()
должно работать. Когда я попытался это сделать, я обнаружил расхождения между результатами read.fortran()
и read.table()
(для одной из строк формата, а не другой), и в следующем примере предполагается, что одна из предложенных строк формата не соответствует пробелу в файл данных.
r <- read.table("r10cancrfix.dat")
fstr <- c("2I3","I4","F7.1","I5","I4","F10.2","26I4")
fstr2 <- c("2F3.0","F4.0","F7.0","F5.0","F4.0","F10.0","26F4.0")
r2 <- read.fortran("r10cancrfix.dat",fstr)
r3 <- read.fortran("r10cancrfix.dat",fstr2)
all.equal(r,r3) ## TRUE
all.equal(r,r2)
## [1] "Component “V4”: Mean relative difference: 0.9"
## [2] "Component “V7”: Mean relative difference: 0.99"
Что происходит?
r$V4[9] ## first non-zero value in this column
## [1] 3.3
r2$V4[9]
## [1] 0.33
Вот что содержит исходный файл:
cat(r0[9])
0 0 5 3.3 52 1 6140.30 5 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Четвертое значение равно 3,3, а не 0,33. Если мы считаем, что интерпретация этого файла человеком верна, то первая строка формата Фортрана неверна.
Дополнительные доказательства того, что они должны быть 3,3, а не 0,33 (и т. Д.), Находятся в файле README. :
ДОЗА 11:17 T65DR общая экспозиция кермы. Используемые классы являются указанными для города c средними по группам доз. Восемь групп доз составляют 0, 1-9, 10-49, 50-99, 100-199, 200-299, 300-399 и 400+ по Цельсию (рад). ... Средние дозы даны в centiGray.
Так что имеет смысл, что среднее значение для 1-9-градусной группы будет 3,3, а не 0,33-градусного ...