20
20
# ' @examples
21
21
# ' x <- pair_links(
22
22
# ' # group on the left hand only
23
- # ' 1:2,
24
23
# ' c("a", "b"),
24
+ # ' # normally, integer index will be interpreted as the index of the
25
+ # ' # origianl data
26
+ # ' 1:2,
27
+ # ' # wrapped with `I()` indicate` the integer index is ordering of the
28
+ # ' # layout
29
+ # ' I(1:2),
25
30
# ' range_link(1, 6),
26
31
# ' range_link("a", "b"),
27
32
# ' # group on the right hand only
49
54
# ' @export
50
55
pair_links <- function (... ) {
51
56
pairs <- rlang :: dots_list(... , .ignore_empty = " all" , .named = NULL )
52
- new_pair_links(lapply(pairs , as_pair_link , x_arg = " ..." ))
57
+ new_pair_links(
58
+ lapply(pairs , as_pair_link , x_arg = " ..." , call = current_call())
59
+ )
53
60
}
54
61
55
62
new_pair_links <- function (x = list (), ... , class = character ()) {
56
63
new_vctr(x , ... , class = c(class , " ggalign_pair_links" ))
57
64
}
58
65
66
+ # ' @export
67
+ obj_print_header.ggalign_pair_links <- function (x , ... ) {
68
+ cat(" <" , vec_ptype_full(x ), " >" , " \n " , sep = " " )
69
+ cat(
70
+ sprintf(
71
+ " A total of %d pair%s of link groups" ,
72
+ vec_size(x ), if (vec_size(x ) > 1L ) " s" else " "
73
+ ),
74
+ " \n " ,
75
+ sep = " "
76
+ )
77
+ invisible (x )
78
+ }
79
+
59
80
# ' @export
60
81
obj_print_data.ggalign_pair_links <- function (x , ... ) {
61
- if (length (x ) > 0L ) {
82
+ if (vec_size (x ) > 0L ) {
62
83
hand1 <- vapply(x , function (hand ) {
63
84
deparse_link(hand , ... , hand = " hand1" )
64
85
}, character (1L ), USE.NAMES = FALSE )
@@ -67,25 +88,31 @@ obj_print_data.ggalign_pair_links <- function(x, ...) {
67
88
}, character (1L ), USE.NAMES = FALSE )
68
89
nms <- c(" " , paste0(names_or_index(x ), " : " ))
69
90
nms <- format(nms , justify = " right" )
70
- empty <- character (length (hand2 ))
91
+ empty <- character (vec_size (hand2 ))
71
92
empty [hand1 == " " & hand2 == " " ] <- " <empty>"
72
93
empty <- format(c(" " , empty ), justify = " left" )
73
94
hand1 <- format(c(" hand1" , hand1 ), justify = " right" )
74
95
hand2 <- format(c(" hand2" , hand2 ), justify = " left" )
75
- content <- paste0(" " , nms , hand1 , " ~ " , hand2 , empty )
76
- cat(" " , content , " " , sep = " \n " )
96
+ cat(" \n " )
97
+ cat(paste0(" " , nms , hand1 , " ~ " , hand2 , empty ), sep = " \n " )
98
+ cat(" \n " )
77
99
}
78
100
invisible (x )
79
101
}
80
102
81
103
# ' @export
82
104
obj_print_footer.ggalign_pair_links <- function (x , ... ) {
83
105
NextMethod()
106
+ # `lengths`: will call `length.ggalign_pair_link()` method
84
107
n <- sum(lengths(x , use.names = FALSE ))
85
- cat(sprintf(
86
- " A total of %d group%s" , n ,
87
- if (n > 1L ) " s" else " "
88
- ), sep = " \n " )
108
+ cat(
109
+ sprintf(
110
+ " A total of %d link group%s" , n ,
111
+ if (n > 1L ) " s" else " "
112
+ ),
113
+ " \n " ,
114
+ sep = " "
115
+ )
89
116
invisible (x )
90
117
}
91
118
@@ -169,18 +196,17 @@ print.ggalign_pair_link <- function(x, ...) obj_print(x, ...)
169
196
170
197
# ' @export
171
198
obj_print_header.ggalign_pair_link <- function (x , ... ) {
172
- cat(sprintf(" <%s>" , vec_ptype_full(x )), sep = " \n " )
199
+ cat(sprintf(" <%s>" , vec_ptype_full(x )), " \n " , sep = " " )
173
200
invisible (x )
174
201
}
175
202
176
203
# ' @export
177
204
obj_print_data.ggalign_pair_link <- function (x , ... ) {
178
205
if (length(x ) > 0L ) {
179
- content <- c(
206
+ cat( c(
180
207
sprintf(" hand1: %s" , deparse_link(.subset2(x , " hand1" ), ... )),
181
208
sprintf(" hand2: %s" , deparse_link(.subset2(x , " hand2" ), ... ))
182
- )
183
- cat(content , sep = " \n " )
209
+ ), sep = " \n " )
184
210
}
185
211
invisible (x )
186
212
}
@@ -280,12 +306,12 @@ vec_ptype2.ggalign_range_link.ggalign_pair_link <- function(x, y, ...) {
280
306
281
307
# ' @export
282
308
vec_ptype2.ggalign_pair_link.AsIs <- function (x , y , ... ) {
283
- vec_ptype2(x , remove_class(y , " AsIs" ))
309
+ vec_ptype2(x , remove_class(y , " AsIs" ), ... )
284
310
}
285
311
286
312
# ' @export
287
313
vec_ptype2.AsIs.ggalign_pair_link <- function (x , y , ... ) {
288
- vec_ptype2(remove_class(x , " AsIs" ), y )
314
+ vec_ptype2(remove_class(x , " AsIs" ), y , ... )
289
315
}
290
316
291
317
# ' @export
@@ -311,15 +337,10 @@ vec_cast.ggalign_pair_link.numeric <- function(x, to, ...,
311
337
vec_cast.ggalign_pair_link.double <- vec_cast.ggalign_pair_link.numeric
312
338
313
339
# ' @export
314
- vec_cast.ggalign_pair_link.integer <- function (x , to , ... ,
315
- x_arg = caller_arg(x ),
316
- to_arg = " " ,
317
- call = caller_env()) {
318
- new_pair_link(x )
319
- }
340
+ vec_cast.ggalign_pair_link.integer <- vec_cast.ggalign_pair_link.numeric
320
341
321
342
# ' @export
322
- vec_cast.ggalign_pair_link.character <- vec_cast.ggalign_pair_link.integer
343
+ vec_cast.ggalign_pair_link.character <- vec_cast.ggalign_pair_link.numeric
323
344
324
345
# ' @export
325
346
vec_cast.ggalign_pair_link.ggalign_range_link <-
@@ -333,7 +354,11 @@ vec_cast.ggalign_pair_link.AsIs <- function(x, to, ...,
333
354
x_arg = caller_arg(x ),
334
355
to_arg = " " ,
335
356
call = caller_env()) {
336
- I(vec_cast(remove_class(x , " AsIs" ), to , x_arg = x_arg , call = call ))
357
+ I(vec_cast(
358
+ remove_class(x , " AsIs" ),
359
+ to = to , ... ,
360
+ x_arg = x_arg , call = call
361
+ ))
337
362
}
338
363
339
364
# ' @export
@@ -366,7 +391,7 @@ as_obs_link.NULL <- function(x, ...) x
366
391
367
392
# ' @export
368
393
as_obs_link.AsIs <- function (x , ... ) {
369
- I(as_obs_link(remove_class(x , " AsIs" )))
394
+ I(as_obs_link(remove_class(x , " AsIs" ), ... ))
370
395
}
371
396
372
397
# ' @export
@@ -382,7 +407,13 @@ as_obs_link.integer <- as_obs_link.NULL
382
407
as_obs_link.double <- as_obs_link.numeric
383
408
384
409
# ' @export
385
- as_obs_link.character <- as_obs_link.NULL
410
+ as_obs_link.character <- function (x , ... , arg = caller_arg(x ),
411
+ call = caller_env()) {
412
+ if (any(x == " " )) {
413
+ cli_abort(" empty string is not allowed" , call = call )
414
+ }
415
+ x
416
+ }
386
417
387
418
# ' @export
388
419
as_obs_link.waiver <- as_obs_link.NULL
@@ -469,7 +500,7 @@ deparse_link2.ggalign_pair_link <- function(x, ..., hand) {
469
500
470
501
# ' @export
471
502
deparse_link2.AsIs <- function (x , ... ) {
472
- ans <- NextMethod( )
503
+ ans <- deparse_link2(remove_class( x , " AsIs " ), ... )
473
504
if (! is.null(ans )) ans <- sprintf(" I(%s)" , ans )
474
505
ans
475
506
}
0 commit comments