Pitanje:
Kako podskupiti GRanges pomoću argumenta proslijeđenog u funkciju?
EB2127
2018-05-30 02:30:39 UTC
view on stackexchange narkive permalink

Recimo da imam sljedeći primjer GRanges:

  biblioteka > (GenomicRanges) > gr = GRanges (+ seqnames = Rle (c ("chr1", "chr2", "chr1", "chr3"), c (1, 3, 2, 4)), + rasponi = IRanges (101: 110, kraj = 111: 120, imena = glava (slova, 10)), + pramen = Rle (pramen (c ("-", "+", "*", "+", "-")), c (1, 2, 2, 3, 2)), + rezultat = 1:10, + GC = seq (1 , 0, dužina = 10)) > grGRanges objekt s 10 raspona i 2 stupca metapodataka: rasponi seqnames nizovi | rezultat GC <Rle> <IRanges> <Rle> | <integer> <numeric> a chr1 [101, 111] - | 1 1 b chr2 [102, 112] + | 2 0,888888888888889 c chr2 [103, 113] + | 3 0,777777777777778 d chr2 [104, 114] * | 4 0,666666666666667 e chr1 [105, 115] * | 5 0,555555555555556 f chr1 [106, 116] + | 6 0,444444444444444 g chr3 [107, 117] + | 7 0,333333333333333 h chr3 [108, 118] + | 8 0,222222222222222 i chr3 [109, 119] - | 9 0,111111111111111 j chr3 [110, 120] - | 10 0 ------- seqinfo: 3 sekvence iz nespecificiranog genoma; nema slijedećih duljina  

Jednostavno je podsetiti ovaj GRanges kao što bi se podskupio R data.frame, na pr.

  > gr $ score [1] 1 2 3 4 5 6 7 8 9 10  

Međutim, pišem funkciju u koju bi korisnik prošao kroz niz za stupac metapodataka za podskup npr

  subsetter = function (granges, column) {return (granges $ column)}  

Pokušavam koristiti funkciju na sljedeći način:

  > podskupina (gr, rezultat)  

koji daje NULL

Ovo očito ne radi, jer će podsetiti gr prema stupcu , a ne score .

  > podskupina (gr, rezultat) NULL  

Da je ovo data.frame, mogao bih podskup podrazumijevati na sljedeći način:

 gr[[(score)]]

ali ovo daje pogrešku

  Pogreška u gr [[(rezultat)]]: ovaj S4 klasa se ne može podskupati  

Postoje li drugi načini za podskup GRangesa osim korištenja $ ?

Tri odgovori:
Devon Ryan
2018-05-30 13:07:59 UTC
view on stackexchange narkive permalink
  podskupina = funkcija (gr, cname) {return (mcols (gr) [[cname]])}  

Vi tada mogu koristiti stvari kao što su podskupina (gr, "GC") i podskupina (gr, "score") .

zx8754
2018-06-04 17:41:14 UTC
view on stackexchange narkive permalink

U takvim je slučajevima najbolje provjeriti str objekta gr . Tada bismo mogli vidjeti da su meta podaci samo okvir podataka unutar S4 objekta:

  gr @ elementMetadata # DataFrame s 10 redaka i 2 stupca # score GC # <integer> <numeric> # 1 1 1.0000000 # 2 2 0.8888889 # ...  

Jednom kada znamo kako pristupiti podatkovnom okviru , možemo tada podsetiti na isti način kao što bismo podstavili dataframe:

  gr @ elementMetadata [, "score"]  

Ne znam vidi smisao umotavanja ovoga u funkciju, ali ako je potrebno:

  podskup <- funkcija (gr, cname) gr @ elementMetadata [, cname] # testiranje functionsubsetter (gr, " rezultat ") # [1] 1 2 3 4 5 6 7 8 9 10  

Uredi

Ili bismo mogli koristite funkciju GenomicRanges :: elementMetadata () za izdvajanje okvira podataka , a zatim podskup:

  podskupina <- funkcija (gr, cname) elementMetadata (gr ) [, cna ja]  
Iako je moguće, uglavnom bih izbjegavao pristup utorima S4 objekata: ako nisu izričito dokumentirani, trebali bi se smatrati * pojedinostima implementacije * koji se mogu mijenjati bez upozorenja. Umjesto toga upotrijebite javne pristupnike (u ovom slučaju `mcols`).
@KonradRudolph dobra točka, dodano alternativno rješenje.
Ah ... pa za tu funkciju dokumentacija kaže da je ne treba koristiti. ;-)
@KonradRudolph, vidim, trebao je prvo pročitati priručnike. Hvala vam.
Konrad Rudolph
2018-05-30 22:41:06 UTC
view on stackexchange narkive permalink

Pored Devonovog odgovora, možete koristiti i nestandardnu ​​procjenu da bi ovo funkcioniralo s imenima R simbola, a ne argumentima niza:

  subsetter = function ( gr, cname) {cname = as.character (nadomjestak (cname)) mcols (gr) [[cname]]}  

Sada se koristi podskupina (gr, rezultat) radi analogno gr $ score , što može biti poželjno. Ali, isto tako, više nećete moći koristiti varijablu:

  var = 'score'subsetter (gr, var) # ne uspije, isto kao `gr $ var`  


Ova pitanja su automatski prevedena s engleskog jezika.Izvorni sadržaj dostupan je na stackexchange-u, što zahvaljujemo na cc by-sa 4.0 licenci pod kojom se distribuira.
Loading...