## 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