@@ -167,7 +167,10 @@ NULL
167
167
}
168
168
169
169
# Side effect: check scalar
170
- if (! is.symbol(j )) {
170
+ if (is.symbol(j )) {
171
+ # FIXME: as_utf8_character() needs rlang > 0.4.11
172
+ j <- chr_unserialise_unicode(as.character(j ))
173
+ } else {
171
174
if (! is.vector(j ) || length(j ) != 1L || is.na(j ) || (is.numeric(j ) && j < 0 ) || is.logical(j )) {
172
175
vectbl_as_col_location2(j , length(x ), j_arg = j_arg , assign = TRUE )
173
176
}
@@ -417,11 +420,13 @@ tbl_subassign <- function(x, i, j, value, i_arg, j_arg, value_arg) {
417
420
418
421
if (is.null(j )) {
419
422
j <- seq_along(x )
423
+ names(j ) <- names2(j )
420
424
} else if (! is.null(j_arg )) {
421
425
j <- vectbl_as_new_col_index(j , x , j_arg , names2(value ), value_arg )
422
426
}
423
427
424
428
value <- vectbl_recycle_rhs(value , fast_nrow(x ), length(j ), i_arg = NULL , value_arg )
429
+
425
430
xo <- tbl_subassign_col(x , j , value )
426
431
} else if (is.null(i_arg )) {
427
432
# x[NULL, ...] <- value
@@ -488,27 +493,29 @@ vectbl_as_new_row_index <- function(i, x, i_arg) {
488
493
vectbl_as_new_col_index <- function (j , x , j_arg , names = " " , value_arg = NULL ) {
489
494
# Creates a named index vector
490
495
# Values: index
491
- # Name: column name (for new columns)
496
+ # Name: column name (for all columns)
492
497
493
498
if (is_bare_character(j )) {
494
499
if (anyNA(j )) {
495
500
cnd_signal(error_assign_columns_non_na_only())
496
501
}
497
502
498
- out <- match(j , names(x ))
499
- new <- which(is.na(out ))
503
+ names <- j
504
+
505
+ j <- match(names , names(x ))
506
+ new <- which(is.na(j ))
500
507
if (has_length(new )) {
501
- out [new ] <- seq.int(length(x ) + 1L , length.out = length(new ))
508
+ j [new ] <- seq.int(length(x ) + 1L , length.out = length(new ))
502
509
}
503
- j <- set_names(out , j )
504
510
} else if (is_bare_numeric(j )) {
505
511
if (anyNA(j )) {
506
512
cnd_signal(error_assign_columns_non_na_only())
507
513
}
508
514
509
515
j <- numtbl_as_col_location_assign(j , length(x ), j_arg = j_arg )
510
516
511
- new <- which(j > length(x ))
517
+ old <- (j < = length(x ))
518
+ new <- which(! old )
512
519
j_new <- j [new ]
513
520
514
521
if (length(names ) != 1L ) {
@@ -524,20 +531,23 @@ vectbl_as_new_col_index <- function(j, x, j_arg, names = "", value_arg = NULL) {
524
531
names [new ][names [new ] == " " ] <- paste0(" ..." , j_new )
525
532
}
526
533
527
- j <- set_names( j , names )
534
+ names [ old ] <- names( x )[ j [ old ] ]
528
535
} else {
529
536
j <- vectbl_as_col_location(j , length(x ), names(x ), j_arg = j_arg , assign = TRUE )
530
537
531
538
if (anyNA(j )) {
532
539
cnd_signal(error_na_column_index(which(is.na(j ))))
533
540
}
541
+
542
+ old <- (j < = length(x ))
543
+ names [old ] <- names(x )[ j [old ] ]
534
544
}
535
545
536
546
if (anyDuplicated(j )) {
537
547
cnd_signal(error_duplicate_column_subscript_for_assignment(j ))
538
548
}
539
549
540
- j
550
+ set_names( j , names )
541
551
}
542
552
543
553
numtbl_as_row_location_assign <- function (i , n , i_arg ) {
0 commit comments