2009-12-08 106 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" 
相关问题