read.table 意外地将 "T"解释为 TRUE

标签 r

我发现了一个问题,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/

相关文章:

R - 在网格中排列时如何更改图像的高度

r - 如何在 R 编程中将日期时间更改为新列中的日期?

r - 使 R 代码更简洁,以创建重叠日期的指示器

c++ - Rcpp:处理包含列表的列表

r - 根据项目特定设置函数默认值 R

r - xtable 和标题对齐

r - 修改ggplot函数外的aes列表

r - 的意义是什么 。在聚合函数中?

r - 在多边形形状文件中创建随机点

r - 笛卡尔积数据框