我发现R似乎将"T"
解释为TRUE
的问题,即使在使用所有方法避免这样做时(至少根据此post)。
示例数据(保存为“test.txt”):
col1 col2
1 T
2 T
3 T
4 T
5 T
6 T
7 T
8 T
9 T
示例代码:
read.table("test.txt", as.is=TRUE, header=TRUE,
stringsAsFactors=FALSE, colClasses=c(character()))
产地:
col1 col2
1 1 TRUE
2 2 TRUE
3 3 TRUE
4 4 TRUE
5 5 TRUE
6 6 TRUE
7 7 TRUE
8 8 TRUE
9 9 TRUE
我发现只有非理想的解决方案是设置header = FALSE:
read.table("test.txt", as.is=TRUE, header=FALSE,
stringsAsFactors=FALSE,
colClasses=c(character()))
V1 V2
1 col1 col2
2 1 T
3 2 T
4 3 T
5 4 T
6 5 T
7 6 T
8 7 T
9 8 T
10 9 T
我意识到这似乎有点人为,但这个边缘案例是真实的,因为人类基因实际上被命名"T"
(!),col1
中的值是该基因内的位置。
提前感谢您的帮助
答案 0 :(得分:7)
是什么让你觉得这是“出人意料”?
R猜测你(这通常很有用),但如果你知道的更好,请使用colClasses=...
参数告诉R.
R> res <- read.table(textConnection("col1 col2\n1 T\n2 T\n3 T"),
+ header=TRUE, colClasses=c("numeric", "character"))
R> res
col1 col2
1 1 T
2 2 T
3 3 T
R> sapply(res, class)
col1 col2
"numeric" "character"
R>
你的帖子格式有些奇怪,所以我起初并没有看到你确实指的是colClasses
。尽管回收规则我总是建议提供矢量
与列数一样多的条目。