r-lib / vctrs

Generic programming with typed R vectors
https://vctrs.r-lib.org
Other
282 stars 65 forks source link

variable selection from tibble fails when called with multi-class variable #1942

Open lisa-avery opened 3 weeks ago

lisa-avery commented 3 weeks ago

Reproducible example

THIS WORKS (data.frame)----------------------

data <- data.frame( age=rnorm(20,35,5), sex=rbinom(20,1,.4), name=sample(LETTERS,20) ) data[["name"]] xvar <- "name" data[[xvar]] class(xvar) <- c(class(xvar),"new_class") data[[xvar]]

THIS FAILS (tibble) ------------------------

data <- tibble::tibble( age=rnorm(20,35,5), sex=rbinom(20,1,.4), name=sample(LETTERS,20) ) data[["name"]] #OK xvar <- "name" data[[xvar]] # OK class(xvar) <- c(class(xvar),"new_class") data[[xvar]] # ERROR

Backtrace

Backtrace: ▆

  1. ├─data[[xvar]]
  2. ├─tibble:::[[.tbl_df(data, xvar)
  3. │ └─tibble:::tbl_subset2(x, j = i, j_arg = substitute(i))
  4. │ └─tibble:::vectbl_as_col_subscript2(j, j_arg, call = call)
  5. │ ├─tibble:::subclass_col_index_errors(...)
  6. │ │ └─base::withCallingHandlers(...)
  7. │ └─vctrs::vec_as_subscript2(j, logical = "error", call = call)
  8. │ ├─vctrs:::result_get(...)
  9. │ └─vctrs:::vec_as_subscript2_result(...)
    1. │ └─vctrs:::vec_as_subscript_result(...)
    2. └─vctrs:::try_catch_impl(data = <externalptr>, vctrs_error_incompatible_type = <fn>)
    3. ├─base::tryCatch(try_catch_callback(data, NULL), ...)
    4. │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
    5. │ └─base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]])
    6. │ └─base (local) doTryCatch(return(expr), name, parentenv, handler)
    7. └─vctrs:::try_catch_callback(data, NULL)
    8. └─vctrs (local) <fn>()
    9. └─vctrs:::vec_ptype2.character.character(...)
    10. └─vctrs:::stop_native_implementation("vec_ptype2.character.character")
    11. └─cli::cli_abort(...)
    12. └─rlang::abort(...)