我发现了一个问题,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
是该基因内的位置。在此先感谢您的帮助
最佳答案
是什么让您认为这是“意外”?
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
.尽管有回收规则,我总是建议提供一个载体条目数与列数一样多。
关于read.table 意外地将 "T"解释为 TRUE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19644318/