1. ホーム
  2. r

[解決済み] R: Error! : タイプ 'S4' のオブジェクトはサブセットテーブルではありません。

2022-02-07 14:47:17

質問

私は"で作業しています。 リーフ R の "パッケージです。

パッケージのdata2haplohh関数からhaplohhクラスのオブジェクト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]], optional = TRUE)でエラー。 cannot coerce class "structure("haplohh", package = "rehh")" to a data.frame

また、chr21の最初の10行を印刷しようとしたとき。

head(chr21, n=10)

こんなエラーが出ます。

Error in x[seq_len(n)] : object of type 'S4' is not subsettable

の出力を追加しています。 str(chr21) :

str(chr21)

形式クラス 'haplohh' [パッケージ "rehh"] と 6 スロット

...@ haplo : num [1:10, 1:1010554] 0 2 2 0 2 0 2 0 2 ...

..@ 位置: 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の初心者です、私が間違っている場所とこのエラーを修正する方法を知ることができれば本当に素晴らしいです。

ありがとうございました。

どのように解決するのですか?

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([email protected], [email protected], position=chr12@position, stringsAsFactors=FALSE)
df <- cbind(df, t( chr12@haplo))

これができれば、head()や他の通常のR関数が使えるようになります。 ただし、rehh パッケージの関数を適用する必要がある場合は、オリジナルの chr21 オブジェクトを使用する必要があります。