5

"T"Rがそうしないようにあらゆる手段を使用しているときに、Rが偶数として解釈するように見える問題を発見しましたTRUE(少なくともこの投稿によると)。

サンプルデータ (「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その遺伝子内の位置に値を付けて命名されているという点で本物です。

助けてくれてありがとう

4

1 に答える 1

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. リサイクル ルールにもかかわらず、列と同じ数のエントリを持つベクトルを提供することを常にお勧めします。

于 2013-10-28T20:20:13.397 に答える