2009-12-08 107 views
3

我讀這樣的一個文本文件中的R 2.10.0閱讀文本文件,並將其轉換爲字符對象

248585_at 250887_at 245638_s_at AFFX-BioC-5_at 
248585_at 250887_at 264488_s_at 245638_s_at AFFX-BioC-5_at AFFX-BioC-3_at AFFX-BioDn-5_at 
248585_at 250887_at 

使用命令 集羣< -read.delim(「測試」 9月=「\ t」的,填充= TRUE,標題= FALSE)

現在,我必須傳遞到每行中的該文件的Bioconductor的函數,它僅字符向量作爲輸入。 我的問題是,使用「as.character」這個「集羣」對象上的一切都變成數字字符串。

> clusters[1,] 
     V1  V2   V3    V4 V5 V6 V7 
1 248585_at 250887_at 245638_s_at AFFX-BioC-5_at   

> as.character(clusters[1,]) 
[1] "1" "1" "2" "3" "1" "1" "1" 

有什麼辦法保持原來的名字,並把它們變成一個字符向量?

也許它可以幫助:通過「read.delim」文件給我的「集羣」對象屬於「列表」類型。

非常感謝:-)

費德里科

回答

6

默認字符列轉換爲因素。您可以通過設置as.is=TRUE說法避免這種情況:

clusters <- read.delim("test", sep="\t", fill=TRUE, header=FALSE, as.is=TRUE) 

如果你只通過從文本文件參數,你可以做類似的特徵向量:

x <- readLines("test") 
xx <- strsplit(x,split="\t") 
xx[[1]] # xx is a list 
# [1] "248585_at"  "250887_at"  "245638_s_at" "AFFX-BioC-5_at" 
1

我決不會料到這樣的事情發生,但在嘗試小試的情況下產生的,你給了相同的結果。

由於df[1,]結果本身就是一個data.frame,一個修復我想嘗試是使用unlist - 似乎工作:

> df <- data.frame(a=LETTERS[1:10], b=LETTERS[11:20], c=LETTERS[5:14]) 
> df[1,] 
    a b c 
1 A K E 
> as.character(df[1,]) 
[1] "1" "1" "1" 
> as.character(unlist(df[2,])) 
[1] "B" "L" "F" 

我想打開data.framematrix第一也將得到解決這樣的:

m <- as.matrix(df) 
> as.character(m[2,]) 
[1] "B" "L" "F" 

爲了避免問題與您data.frame你可能要因素設定stringsAsFactors=TRUE從文本文件,例如,在數據讀取時:

clusters <- read.delim("test", sep="\t", fill=TRUE, header=FALSE, 
         stringsAsFactors=FALSE) 

,畢竟是,意外的行爲似乎來自在你data.frame原AFFY探頭作爲因子處理的事實。所以,在做stringsAsFactors=FALSE東西會側步大張旗鼓:

df <- data.frame(a=LETTERS[1:10], b=LETTERS[11:20], 
       c=LETTERS[5:14], stringsAsFactors=FALSE) 
> as.character(df[1,]) 
[1] "A" "K" "E" 
相關問題