blob: 28eb798548e5da39f6a217f6caa7f5440d929b23 [file] [log] [blame]
R version 3.6.2 Patched (2020-02-12 r77795) -- "Dark and Stormy Night"
Copyright (C) 2020 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
> ## tests of boundary cases in read.table()
>
> ## force standard handling for character cols
> options(stringsAsFactors=TRUE)
>
> # empty file
> file.create("foo1")
[1] TRUE
> try(read.table("foo1")) # fails
Error in read.table("foo1") : no lines available in input
> read.table("foo1", col.names=LETTERS[1:4])
[1] A B C D
<0 rows> (or 0-length row.names)
> unlink("foo1")
>
> # header only
> cat("head\n", file = "foo2")
> read.table("foo2")
V1
1 head
> try(read.table("foo2", header=TRUE)) # fails in 1.2.3
[1] head
<0 rows> (or 0-length row.names)
> unlink("foo2")
> # header detection
> cat("head\n", 1:2, "\n", 3:4, "\n", file = "foo3")
> read.table("foo3", header=TRUE)
head
1 2
3 4
> read.table("foo3", header=TRUE, col.names="V1")
V1
1 2
3 4
> read.table("foo3", header=TRUE, row.names=1)
head
1 2
3 4
> read.table("foo3", header=TRUE, row.names="row.names")
head
1 2
3 4
> read.table("foo3", header=TRUE, row.names="head") # fails in 1.2.3
row.names
2 1
4 3
>
> # wrong col.names
> try(read.table("foo3", header=TRUE, col.names=letters[1:4]))
Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, :
line 1 did not have 4 elements
In addition: Warning message:
In read.table("foo3", header = TRUE, col.names = letters[1:4]) :
header and 'col.names' are of different lengths
> unlink("foo3")
>
> # incomplete last line
> cat("head\n", 1:2, "\n", 3:4, file = "foo4")
> read.table("foo4", header=TRUE)
head
1 2
3 4
Warning message:
In read.table("foo4", header = TRUE) :
incomplete final line found by readTableHeader on 'foo4'
> unlink("foo4")
>
> # blank last line
> cat("head\n\n", 1:2, "\n", 3:4, "\n\n", file = "foo5")
> read.table("foo5", header=TRUE)
head
1 2
3 4
>
> # test of fill
> read.table("foo5", header=FALSE, fill=TRUE, blank.lines.skip=FALSE) # fails in 1.2.3
V1 V2
1 head NA
2 NA
3 1 2
4 3 4
5 NA
> unlink("foo5")
>
> cat("head\n", 1:2, "\n", 3:5, "\n", 6:9, "\n", file = "foo6")
> try(read.table("foo6", header=TRUE))
Error in read.table("foo6", header = TRUE) :
more columns than column names
> try(read.table("foo6", header=TRUE, fill=TRUE))
Error in read.table("foo6", header = TRUE, fill = TRUE) :
more columns than column names
> read.table("foo6", header=FALSE, fill=TRUE)
V1 V2 V3 V4
1 head NA NA NA
2 1 2 NA NA
3 3 4 5 NA
4 6 7 8 9
> 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"))
A B C D E F
1 1 1.1 1.1+0i NA FALSE abc
2 NA NA NA NA NA <NA>
3 1 2.0 3.0+0i NA TRUE def
> sapply(res, typeof)
A B C D E F
"integer" "double" "complex" "logical" "logical" "integer"
> sapply(res, class)
A B C D E F
"integer" "numeric" "complex" "logical" "logical" "factor"
> (res2 <- read.table("foo7",
+ colClasses = c("character", rep("numeric", 2),
+ "complex", "integer", "logical", "character")))
A B C D E F
1 1 1.1 1.1+0i NA FALSE abc
2 NA NA NA NA NA <NA>
3 1 2.0 3.0+0i NA TRUE def
> sapply(res2, typeof)
A B C D E F
"double" "double" "complex" "integer" "logical" "character"
> sapply(res2, class)
A B C D E F
"numeric" "numeric" "complex" "integer" "logical" "character"
> unlink("foo7")
>
> # should be logical
> type.convert(character(0))
logical(0)
>
> # 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)
a b c
1 1 2 3
2 4 5 6
3 7 8 9
> 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="")
x1 x.2 x3
1 1 2 2
2 2 3 3
> 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")
V1 V2 V3
1 C1 C2 C3
2 Panel Area Examined # Blemishes
3 1 0.8 3
4 2 0.6 2
5 3 0.8 3
> 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 = "%")
V1 V2 V3
1 C1 C2 C3
2 Panel Area Examined % Blemishes
3 1 0.8 3
4 2 0.6 2
5 3 0.8 3
> 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)
[1] 1 2 3 4 5 6 7 8
> close(con)
>
> ## tests of allowEscape
> x <- "1 2 3 \\ab\\c"
> writeLines(x, "test.dat")
> readLines("test.dat")
[1] "1 2 3 \\ab\\c"
> scan("test.dat", "", allowEscapes=TRUE)
Read 4 items
[1] "1" "2" "3" "\abc"
> scan("test.dat", "", allowEscapes=FALSE)
Read 4 items
[1] "1" "2" "3" "\\ab\\c"
> read.table("test.dat", header=FALSE, allowEscapes=TRUE)
V1 V2 V3 V4
1 1 2 3 \abc
> read.table("test.dat", header=FALSE, allowEscapes=FALSE)
V1 V2 V3 V4
1 1 2 3 \\ab\\c
> 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)
TEST
1 1
2 2
3 \\b
4 4
5 5
6 \\040
7 \\x20
8 c:\\spencer\\tests
9 \\t
10 \\n
11 \\r
> unlink("test.dat")
> ## end of tests
>