| ## tests of boundary cases in read.table() |
| |
| ## force standard handling for character cols |
| options(stringsAsFactors=FALSE) # R >= 4.0.0 |
| |
| # empty file |
| file.create("foo1") |
| try(read.table("foo1")) # fails |
| read.table("foo1", col.names=LETTERS[1:4]) |
| unlink("foo1") |
| |
| # header only |
| cat("head\n", file = "foo2") |
| read.table("foo2") |
| try(read.table("foo2", header=TRUE)) # fails in 1.2.3 |
| unlink("foo2") |
| # header detection |
| cat("head\n", 1:2, "\n", 3:4, "\n", file = "foo3") |
| read.table("foo3", header=TRUE) |
| read.table("foo3", header=TRUE, col.names="V1") |
| read.table("foo3", header=TRUE, row.names=1) |
| read.table("foo3", header=TRUE, row.names="row.names") |
| read.table("foo3", header=TRUE, row.names="head") # fails in 1.2.3 |
| |
| # wrong col.names |
| try(read.table("foo3", header=TRUE, col.names=letters[1:4])) |
| unlink("foo3") |
| |
| # incomplete last line |
| cat("head\n", 1:2, "\n", 3:4, file = "foo4") |
| read.table("foo4", header=TRUE) |
| unlink("foo4") |
| |
| # blank last line |
| cat("head\n\n", 1:2, "\n", 3:4, "\n\n", file = "foo5") |
| read.table("foo5", header=TRUE) |
| |
| # test of fill |
| read.table("foo5", header=FALSE, fill=TRUE, blank.lines.skip=FALSE) # fails in 1.2.3 |
| unlink("foo5") |
| |
| cat("head\n", 1:2, "\n", 3:5, "\n", 6:9, "\n", file = "foo6") |
| try(read.table("foo6", header=TRUE)) |
| try(read.table("foo6", header=TRUE, fill=TRUE)) |
| read.table("foo6", header=FALSE, fill=TRUE) |
| unlink("foo6") |
| |
| # test of type conversion in 1.4.0 and later. |
| cat("A B C D E F\n", |
| "1 1 1.1 1.1+0i NA F abc\n", |
| "2 NA NA NA NA NA NA\n", |
| "3 1 2 3 NA TRUE def\n", |
| sep = "", file = "foo7") |
| (res <- read.table("foo7", stringsAsFactors=TRUE)) |
| sapply(res, typeof) |
| sapply(res, class) |
| (res2 <- read.table("foo7", |
| colClasses = c("character", rep("numeric", 2), |
| "complex", "integer", "logical", "character"))) |
| sapply(res2, typeof) |
| sapply(res2, class) |
| unlink("foo7") |
| |
| # should be logical |
| type.convert(character(0), as.is=FALSE) |
| |
| # test of comments in data files |
| cat("# a test file", |
| "# line 2", |
| "# line 3", |
| "# line 4", |
| "# line 5", |
| "## now the header", |
| " a b c", |
| "# some more comments", |
| "1 2 3", |
| "4 5 6# this is the second data row of the file", |
| " # some more comments", |
| "7 8 9", |
| "# trailing comment\n", |
| file= "ex.data", sep="\n") |
| read.table("ex.data", header = T) |
| unlink("ex.data") |
| |
| ## comment chars in headers |
| cat("x1\tx#2\tx3\n1\t2\t2\n2\t3\t3\n", file = "test.dat") |
| read.table("test.dat", header=T, comment.char="") |
| unlink("test.dat") |
| |
| cat('#comment\n\n#another\n#\n#\n', |
| 'C1\tC2\tC3\n"Panel"\t"Area Examined"\t"# Blemishes"\n', |
| '"1"\t"0.8"\t"3"\n', '"2"\t"0.6"\t"2"\n', '"3"\t"0.8"\t"3"\n', |
| file = "test.dat", sep="") |
| read.table("test.dat") |
| unlink("test.dat") |
| |
| cat('%comment\n\n%another\n%\n%\n', |
| 'C1\tC2\tC3\n"Panel"\t"Area Examined"\t"% Blemishes"\n', |
| '"1"\t"0.8"\t"3"\n', '"2"\t"0.6"\t"2"\n', '"3"\t"0.8"\t"3"\n', |
| file = "test.dat", sep="") |
| read.table("test.dat", comment.char = "%") |
| unlink("test.dat") |
| |
| ## test on Windows Unicode file |
| con <- file(file.path(Sys.getenv("SRCDIR"), "WinUnicode.dat"), |
| encoding="UCS-2LE") |
| scan(con, 0, quiet=TRUE) |
| close(con) |
| |
| ## tests of allowEscape |
| x <- "1 2 3 \\ab\\c" |
| writeLines(x, "test.dat") |
| readLines("test.dat") |
| scan("test.dat", "", allowEscapes=TRUE) |
| scan("test.dat", "", allowEscapes=FALSE) |
| read.table("test.dat", header=FALSE, allowEscapes=TRUE) |
| read.table("test.dat", header=FALSE, allowEscapes=FALSE) |
| x <- c("TEST", 1, 2, "\\b", 4, 5, "\\040", "\\x20", |
| "c:\\spencer\\tests", |
| "\\t", "\\n", "\\r") |
| writeLines(x, "test.dat") |
| read.table("test.dat", allowEscapes=FALSE, header = TRUE) |
| unlink("test.dat") |
| ## end of tests |