R:错误!! :'S4'类型的对象不是子集

时间:2018-05-22 12:00:47

标签: r

我正在使用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的新手,这真的很棒如果我能知道我哪里出错了以及如何解决这个错误。

提前致谢!

1 个答案:

答案 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对象