我正在使用R的 rehh “包。
我从包的data2haplohh函数创建了一个类haphahh的对象chr21。
现在,当我尝试将其写入文件时:
write.table(chr21, file = "CHR21", append = FALSE, quote = TRUE,sep = "\t", eol="\n", na= "NA", dec=".", row.names=TRUE, col.names=TRUE)
我得到的错误是:
as.data.frame.default(x [[i]],可选= TRUE)出错: 不能强迫类“结构(”haplohh“,包=”rehh“)”到data.frame
当我尝试打印前10行chr21时,
head(chr21, n=10)
我收到此错误:
x [seq_len(n)]中的错误:'S4'类型的对象不是子集
好的,所以我要添加 str(chr21)的输出:
STR(CHR21)
正式班级'haplohh'[包“rehh”]有6个插槽
.. @ haplo:num [1:10,1:1010554] 0 2 2 2 0 2 0 2 0 2 ...
.. @ position:num [1:1010554] 9411410 9411645 9411785 9412503 9413228 ...
.. @ snp.name:chr [1:1010554]“rs78200054”“rs71235074”“rs71235075”“rs71220884”......
.. @ chr.name:chr“21”
.. @ nhap:int 10
.. @ nsnp:int 1010554
我是R的新手,这真的很棒如果我能知道我哪里出错了以及如何解决这个错误。
提前致谢!
答案 0 :(得分:1)
library(rehh)
#Copy example files in the current working directory.
make.example.files()
#Chreate some sampel data
chr12<-data2haplohh(hap_file="bta12_hapguess_switch.out",map_file="map.inp",
min_maf=0.05,popsel=7,chr.name=12,recode.allele=TRUE)
# Look at the structure of the object (in your case it is called chr21)
str(chr12)
Formal class 'haplohh' [package "rehh"] with 6 slots
..@ haplo : num [1:280, 1:1202] 2 2 1 2 2 2 1 2 2 2 ...
..@ position: num [1:1202] 79823 125974 175087 219152 256896 ...
..@ snp.name: chr [1:1202] "F1200140" "F1200150" "F1200170" "F1200180" ...
..@ chr.name: chr "12"
..@ nhap : int 280
..@ nsnp : int 1202
您可以从此对象中提取各种组件:
# Extract data matrix from it
haplo.matrix <- chr12@haplo
# Extract position
pos <- chr12@position
head(pos)
#[1] 79823 125974 175087 219152 256896 316254
如果您需要将数据恢复为数据帧格式,您可以执行以下操作:
df <- data.frame(chr=chr12@chr.name, snp.name=chr12@snp.name, position=chr12@position, stringsAsFactors=FALSE)
df <- cbind(df, t( chr12@haplo))
完成后,您可以使用head()和其他常规R函数。 但是,如果您需要应用rehh包中的函数,则应使用原始chr21对象