Skip to content

Commit ef55306

Browse files
authored
Merge pull request #113 from sa-lee/devel
feat: add pull method, alongside tests and updated documentation
2 parents 051e720 + 154e5c3 commit ef55306

31 files changed

+590
-179
lines changed

DESCRIPTION

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Package: plyranges
22
Type: Package
33
Title: A fluent interface for manipulating GenomicRanges
4-
Version: 1.27.5
4+
Version: 1.27.6
55
Authors@R: c(
66
person("Stuart", "Lee", role = c("aut"),
77
comment = c(ORCID = "0000-0003-1179-8436")),
@@ -22,10 +22,10 @@ Depends:
2222
R (>= 3.5),
2323
BiocGenerics,
2424
IRanges (>= 2.12.0),
25-
GenomicRanges (>= 1.28.4)
25+
GenomicRanges (>= 1.28.4),
26+
dplyr
2627
Imports:
2728
methods,
28-
dplyr,
2929
rlang (>= 0.2.0),
3030
magrittr,
3131
tidyselect (>= 1.0.0),
@@ -53,7 +53,7 @@ Suggests:
5353
ggplot2
5454
VignetteBuilder: knitr
5555
Roxygen: list(markdown = TRUE)
56-
RoxygenNote: 7.2.3
56+
RoxygenNote: 7.3.2
5757
Collate:
5858
'class-AnchoredRanges.R'
5959
'class-Operator.R'
@@ -63,6 +63,7 @@ Collate:
6363
'dplyr-filter.R'
6464
'dplyr-groups.R'
6565
'dplyr-mutate.R'
66+
'dplyr-pull.R'
6667
'dplyr-select.R'
6768
'dplyr-slice.R'
6869
'dplyr-summarize.R'
@@ -105,4 +106,4 @@ Collate:
105106
'ranges-rangewise-setops.R'
106107
'ranges-reduce.R'
107108
'ranges-setops.R'
108-
'reexports.R'
109+
'utils-pipe.R'

NAMESPACE

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ S3method(disjoin_ranges,GroupedIntegerRanges)
4141
S3method(disjoin_ranges,IntegerRanges)
4242
S3method(disjoin_ranges_directed,GenomicRanges)
4343
S3method(disjoin_ranges_directed,GroupedGenomicRanges)
44+
S3method(dplyr::pull,Ranges)
45+
S3method(filter,BamFileOperator)
4446
S3method(filter,DeferredGenomicRanges)
4547
S3method(filter,DelegatingGenomicRanges)
4648
S3method(filter,DelegatingIntegerRanges)
@@ -50,6 +52,7 @@ S3method(filter,Ranges)
5052
S3method(filter_by_non_overlaps,GenomicRanges)
5153
S3method(filter_by_non_overlaps,IntegerRanges)
5254
S3method(filter_by_non_overlaps_directed,GenomicRanges)
55+
S3method(filter_by_overlaps,BamFileOperator)
5356
S3method(filter_by_overlaps,DeferredGenomicRanges)
5457
S3method(filter_by_overlaps,GenomicRanges)
5558
S3method(filter_by_overlaps,IntegerRanges)
@@ -121,6 +124,7 @@ S3method(join_precede,IntegerRanges)
121124
S3method(join_precede_downstream,GenomicRanges)
122125
S3method(join_precede_right,GenomicRanges)
123126
S3method(join_precede_right,IntegerRanges)
127+
S3method(load_genomic_file,BamFileOperator)
124128
S3method(mutate,AnchoredGenomicRanges)
125129
S3method(mutate,AnchoredIntegerRanges)
126130
S3method(mutate,DeferredGenomicRanges)
@@ -129,6 +133,11 @@ S3method(mutate,DelegatingIntegerRanges)
129133
S3method(mutate,GroupedGenomicRanges)
130134
S3method(mutate,GroupedIntegerRanges)
131135
S3method(mutate,Ranges)
136+
S3method(overscope_ranges,DelegatingGenomicRanges)
137+
S3method(overscope_ranges,DelegatingIntegerRanges)
138+
S3method(overscope_ranges,GroupedGenomicRanges)
139+
S3method(overscope_ranges,GroupedIntegerRanges)
140+
S3method(overscope_ranges,Ranges)
132141
S3method(pair_follow,GenomicRanges)
133142
S3method(pair_follow,IntegerRanges)
134143
S3method(pair_nearest,GenomicRanges)
@@ -137,6 +146,10 @@ S3method(pair_overlaps,GenomicRanges)
137146
S3method(pair_overlaps,IntegerRanges)
138147
S3method(pair_precede,GenomicRanges)
139148
S3method(pair_precede,IntegerRanges)
149+
S3method(pull,DelegatingGenomicRanges)
150+
S3method(pull,DelegatingIntegerRanges)
151+
S3method(pull,GroupedGenomicRanges)
152+
S3method(pull,GroupedIntegerRanges)
140153
S3method(reduce_ranges,GenomicRanges)
141154
S3method(reduce_ranges,GroupedGenomicRanges)
142155
S3method(reduce_ranges,GroupedIntegerRanges)
@@ -148,6 +161,13 @@ S3method(select,DeferredGenomicRanges)
148161
S3method(select,DelegatingGenomicRanges)
149162
S3method(select,DelegatingIntegerRanges)
150163
S3method(select,Ranges)
164+
S3method(set_end,Ranges)
165+
S3method(set_seqnames,GenomicRanges)
166+
S3method(set_start,Ranges)
167+
S3method(set_strand,GenomicRanges)
168+
S3method(set_width,AnchoredGenomicRanges)
169+
S3method(set_width,AnchoredIntegerRanges)
170+
S3method(set_width,Ranges)
151171
S3method(setdiff_ranges,GenomicRanges)
152172
S3method(setdiff_ranges,IntegerRanges)
153173
S3method(setdiff_ranges_directed,GenomicRanges)
@@ -174,8 +194,6 @@ S3method(ungroup,Ranges)
174194
S3method(union_ranges,GenomicRanges)
175195
S3method(union_ranges,IntegerRanges)
176196
S3method(union_ranges_directed,GenomicRanges)
177-
export("!!!")
178-
export("!!")
179197
export("%>%")
180198
export("%intersect%")
181199
export("%setdiff%")
@@ -192,7 +210,6 @@ export(anchor_center)
192210
export(anchor_centre)
193211
export(anchor_end)
194212
export(anchor_start)
195-
export(arrange)
196213
export(as_granges)
197214
export(as_iranges)
198215
export(as_ranges)
@@ -210,7 +227,6 @@ export(count_overlaps_within_directed)
210227
export(disjoin_ranges)
211228
export(disjoin_ranges_directed)
212229
export(expand_ranges)
213-
export(filter)
214230
export(filter_by_non_overlaps)
215231
export(filter_by_non_overlaps_directed)
216232
export(filter_by_overlaps)
@@ -225,10 +241,7 @@ export(flank_right)
225241
export(flank_upstream)
226242
export(genome_info)
227243
export(get_genome_info)
228-
export(group_by)
229244
export(group_by_overlaps)
230-
export(group_vars)
231-
export(groups)
232245
export(id_to_column)
233246
export(intersect_ranges)
234247
export(intersect_ranges_directed)
@@ -260,7 +273,6 @@ export(join_overlap_self_within_directed)
260273
export(join_precede)
261274
export(join_precede_downstream)
262275
export(join_precede_right)
263-
export(mutate)
264276
export(n)
265277
export(n_distinct)
266278
export(names_to_column)
@@ -282,7 +294,6 @@ export(read_wig)
282294
export(reduce_ranges)
283295
export(reduce_ranges_directed)
284296
export(remove_names)
285-
export(select)
286297
export(set_end)
287298
export(set_genome_info)
288299
export(set_seqnames)
@@ -295,15 +306,11 @@ export(shift_downstream)
295306
export(shift_left)
296307
export(shift_right)
297308
export(shift_upstream)
298-
export(slice)
299309
export(slide_ranges)
300310
export(span)
301311
export(stretch)
302-
export(summarise)
303-
export(summarize)
304312
export(tile_ranges)
305313
export(unanchor)
306-
export(ungroup)
307314
export(union_ranges)
308315
export(union_ranges_directed)
309316
export(write_bed)
@@ -320,6 +327,7 @@ exportClasses(DeferredGenomicRanges)
320327
exportClasses(FileOperator)
321328
exportClasses(GroupedGenomicRanges)
322329
exportClasses(GroupedIntegerRanges)
330+
import(dplyr)
323331
importFrom(BiocGenerics,"%in%")
324332
importFrom(BiocGenerics,"end<-")
325333
importFrom(BiocGenerics,"score<-")
@@ -351,9 +359,6 @@ importFrom(GenomicAlignments,readGAlignments)
351359
importFrom(GenomicRanges,GRanges)
352360
importFrom(GenomicRanges,distanceToNearest)
353361
importFrom(GenomicRanges,granges)
354-
importFrom(GenomicRanges,intersect)
355-
importFrom(GenomicRanges,setdiff)
356-
importFrom(GenomicRanges,union)
357362
importFrom(IRanges,IRanges)
358363
importFrom(IRanges,as.env)
359364
importFrom(IRanges,countOverlaps)
@@ -365,7 +370,6 @@ importFrom(IRanges,findOverlapPairs)
365370
importFrom(IRanges,findOverlaps)
366371
importFrom(IRanges,flank)
367372
importFrom(IRanges,follow)
368-
importFrom(IRanges,intersect)
369373
importFrom(IRanges,mid)
370374
importFrom(IRanges,nearest)
371375
importFrom(IRanges,pgap)
@@ -376,12 +380,10 @@ importFrom(IRanges,punion)
376380
importFrom(IRanges,ranges)
377381
importFrom(IRanges,reduce)
378382
importFrom(IRanges,resize)
379-
importFrom(IRanges,setdiff)
380383
importFrom(IRanges,shift)
381384
importFrom(IRanges,slidingWindows)
382385
importFrom(IRanges,subsetByOverlaps)
383386
importFrom(IRanges,tile)
384-
importFrom(IRanges,union)
385387
importFrom(Rsamtools,"bamFlag<-")
386388
importFrom(Rsamtools,"bamMapqFilter<-")
387389
importFrom(Rsamtools,"bamTag<-")
@@ -403,15 +405,13 @@ importFrom(S4Vectors,decode)
403405
importFrom(S4Vectors,elementNROWS)
404406
importFrom(S4Vectors,endoapply)
405407
importFrom(S4Vectors,expand)
406-
importFrom(S4Vectors,first)
407408
importFrom(S4Vectors,mcols)
408409
importFrom(S4Vectors,metadata)
409410
importFrom(S4Vectors,parallelVectorNames)
410411
importFrom(S4Vectors,queryHits)
411412
importFrom(S4Vectors,queryLength)
412413
importFrom(S4Vectors,rbind)
413414
importFrom(S4Vectors,runValue)
414-
importFrom(S4Vectors,second)
415415
importFrom(S4Vectors,splitAsList)
416416
importFrom(S4Vectors,subjectHits)
417417
importFrom(S4Vectors,zipup)
@@ -427,6 +427,7 @@ importFrom(dplyr,group_split)
427427
importFrom(dplyr,group_vars)
428428
importFrom(dplyr,groups)
429429
importFrom(dplyr,mutate)
430+
importFrom(dplyr,pull)
430431
importFrom(dplyr,sample_n)
431432
importFrom(dplyr,select)
432433
importFrom(dplyr,slice)
@@ -449,16 +450,17 @@ importFrom(methods,setMethod)
449450
importFrom(methods,setValidity)
450451
importFrom(methods,show)
451452
importFrom(rlang,"!!!")
452-
importFrom(rlang,"!!")
453453
importFrom(rlang,":=")
454454
importFrom(rlang,dots_values)
455+
importFrom(rlang,enquo)
455456
importFrom(rlang,enquos)
456457
importFrom(rlang,env_bind)
457458
importFrom(rlang,env_get)
458459
importFrom(rlang,env_parent)
459460
importFrom(rlang,eval_tidy)
460461
importFrom(rlang,have_name)
461462
importFrom(rlang,new_data_mask)
463+
importFrom(rlang,quo_is_missing)
462464
importFrom(rlang,quo_name)
463465
importFrom(rlang,quos)
464466
importFrom(rlang,syms)

NEWS.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
# plyranges 1.27.6
2+
3+
* added `pull()` method for Ranges objects that extracts a single column as a vector
4+
* moved `dplyr` to Depends and removing tidyverse reexports
5+
16
# plyranges 1.9.3
27

38
* minor spelling and layout fixes to vignette,

R/class-Operator.R

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@ new_bam_ops <- function(file, index = file, paired = FALSE) {
3838
# Generic File loader
3939
#' @importFrom Rsamtools bamFlag bamWhich ScanBamParam
4040
#' @importFrom GenomicAlignments readGAlignments readGAlignmentPairs
41-
#' @importFrom S4Vectors first second
41+
#' @importFrom S4Vectors DataFrame
4242
load_genomic_file <- function(ops) UseMethod("load_genomic_file")
4343

44-
44+
#' @export
4545
load_genomic_file.BamFileOperator <- function(ops) {
4646
if (ops@paired) return(paired_alignments(ops))
4747
unpaired_alignments(ops)
@@ -66,8 +66,8 @@ paired_alignments <- function(ops) {
6666
param = ops@param,
6767
with.which_label = check_which_label(ops)
6868
)
69-
r1 <- first(alignments)
70-
r2 <- second(alignments)
69+
r1 <- S4Vectors::first(alignments)
70+
r2 <- S4Vectors::second(alignments)
7171
r1_grng <- galn_to_grng(r1)
7272
mcols(r1_grng)[["read_pair_id"]] <- seq_along(r1_grng)
7373
mcols(r1_grng)[["read_pair_group"]] <- 1L

R/dplyr-groups.R

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
#'
2424
#' @section Accessors:
2525
#' To return grouping variables on a grouped Ranges use either
26-
#' \itemize{
26+
#' \describe{
2727
#' \item{`groups(x)`}{Returns a list of symbols}
2828
#' \item{`group_vars(x)`}{Returns a character vector}
2929
#' }

R/dplyr-pull.R

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
#' Extract a single column from a Ranges object as a vector
2+
#'
3+
#' @param .data a `Ranges` object
4+
#' @param var A variable specified as:
5+
#' * a literal variable name
6+
#' * a positive integer, giving the position counting from the left. In this
7+
#' case order is start, end, width, (strand, seqnames), gc and score.
8+
#' * a negative integer, giving the position counting from the right.
9+
#' The default returns the last column (on the assumption that's the column
10+
#' you've created most recently). This argument is taken by expression and
11+
#' supports quasiquotation (you can unquote column names and column locations).
12+
#' @param name An optional parameter that specifies the column to be used as
13+
#' names for a named vector. Specified in a similar manner as `var`.
14+
#' @param ... For use by methods.
15+
#'
16+
#'
17+
#' @importFrom dplyr pull
18+
#' @importFrom rlang enquo quo_is_missing
19+
#' @importFrom tidyselect eval_select
20+
#' @seealso [dplyr::pull()]
21+
#' @name pull-ranges
22+
#' @rdname pull-ranges
23+
#'
24+
#' @examples
25+
#' df <- data.frame(start = 1:10,
26+
#' width = 5,
27+
#' seqnames = "seq1",
28+
#' strand = sample(c("+", "-", "*"), 10, replace = TRUE),
29+
#' gc = runif(10),
30+
#' score = rpois(10, 2))
31+
#' rng <- as_granges(df)
32+
#'
33+
#' # Pull parts of the range
34+
#' pull(rng, start)
35+
#' # equivalent to start(rng)
36+
#'
37+
#' # Pull by column name
38+
#' pull(rng, gc)
39+
#' pull(rng, score)
40+
#'
41+
#' # Pull by position (positive from left, negative from right)
42+
#' pull(rng, 1) # First metadata column
43+
#' pull(rng, -1) # Last metadata column (default)
44+
#' pull(rng, -2) # Second to last metadata column
45+
#'
46+
#' # Pull with names
47+
#' pull(rng, score, name = gc)
48+
#'
49+
#' @method pull Ranges
50+
#' @exportS3Method dplyr::pull
51+
pull.Ranges <- function(.data, var = -1, name = NULL, ...) {
52+
53+
var <- tidyselect::vars_pull(tbl_vars(.data), !!rlang::enquo(var))
54+
name <- rlang::enquo(name)
55+
env <- overscope_ranges(.data)
56+
57+
pulled <- eval_tidy(rlang::ensym(var), env)
58+
if (rlang::quo_is_null(name)) {
59+
return(pulled)
60+
}
61+
62+
name <- tidyselect::vars_pull(tbl_vars(.data), !!name)
63+
named <- eval_tidy(rlang::ensym(name), env)
64+
65+
rlang::set_names(pulled, nm = named)
66+
67+
}
68+
69+
70+
#' @method pull DelegatingGenomicRanges
71+
#' @export
72+
pull.DelegatingGenomicRanges <- function(.data, var = -1, name = NULL, ...) {
73+
pull(.data@delegate, var = {{var}}, name = {{name}}, ...)
74+
}
75+
76+
#' @method pull DelegatingIntegerRanges
77+
#' @export
78+
pull.DelegatingIntegerRanges <- pull.DelegatingGenomicRanges
79+
80+
#' @method pull GroupedGenomicRanges
81+
#' @export
82+
pull.GroupedGenomicRanges <- function(.data, var = -1, name = NULL, ...) {
83+
pull(.data@delegate, var = {{var}}, name = {{name}}, ...)
84+
}
85+
86+
#' @method pull GroupedIntegerRanges
87+
#' @export
88+
pull.GroupedIntegerRanges <- pull.GroupedGenomicRanges

R/dplyr-slice.R

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ generate_slice <- function(.data, dots) {
1313
#'
1414
#' @param .data a `Ranges` object
1515
#' @param ... Integer row values indicating rows to keep. If `.data` has
16-
#' been grouped via [group_by()], then the positions are selected within each group.
16+
#' been grouped via [group_by.GenomicRanges()], then the positions are selected within each group.
1717
#' @param .preserve when FALSE (the default) the grouping structure is
1818
#' recomputed, otherwise it is kept as is. Currently ignored.
1919
#' @return a GRanges object

0 commit comments

Comments
 (0)