"Object not found" error when {targets} target used to reference column name

25 Views Asked by At

Please see the following reproducible example. I've created a basic {targets} pipeline in which I try to mutate a data frame column where the column name is specified by the value of a separate target. I specify the column name as a separate target because, in production use, I want to be able to refer to the column name in other code, documentation, etc., and update it and re-run the pipeline as necessary.

library(targets)

tar_script({
  library(dplyr)
  list(
    tar_target(
      name = df,
      command = data.frame(id = c("a", "b", "c", "d"),
                           val = c(0, 1, 2, 3))
    ),
    tar_target(
      name = val_field,
      command = "val"
    ),
    tar_target(
      name = df_fct,
      command = 
        df %>% mutate(val_fct = factor(.data[[val_field]]))
    )
  )
})

I get the following error message when trying to run the pipeline under {targets} v1.6.0, but I've experienced it since at least v1.2.

Error:
! Error running targets::tar_make()
Error messages: targets::tar_meta(fields = error, complete_only = TRUE)
Debugging guide: https://books.ropensci.org/targets/debugging.html
How to ask for help: https://books.ropensci.org/targets/help.html
Last error message:
    object 'val_field' not found
Last error traceback:
    tryCatch(withCallingHandlers({ NULL saveRDS(do.call(do.call, c(readRDS("...
    tryCatchList(expr, classes, parentenv, handlers)
    tryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]), na...
    doTryCatch(return(expr), name, parentenv, handler)
    tryCatchList(expr, names[-nh], parentenv, handlers[-nh])
    tryCatchOne(expr, names, parentenv, handlers[[1L]])
    doTryCatch(return(expr), name, parentenv, handler)
    withCallingHandlers({ NULL saveRDS(do.call(do.call, c(readRDS("C:\\Users...
    saveRDS(do.call(do.call, c(readRDS("C:\\Users\\OdgersN\\AppData\\Local\\...
    do.call(do.call, c(readRDS("C:\\Users\\OdgersN\\AppData\\Local\\Temp\\Rt...
    (function (what, args, quote = FALSE, envir = parent.frame()) { if (!is....
    (function (targets_function, targets_arguments, options, envir = NULL, s...
    tryCatch(out <- withCallingHandlers(targets::tar_callr_inner_try(targets...
    tryCatchList(expr, classes, parentenv, handlers)
    tryCatchOne(expr, names, parentenv, handlers[[1L]])
    doTryCatch(return(expr), name, parentenv, handler)
    withCallingHandlers(targets::tar_callr_inner_try(targets_function = targ...
    targets::tar_callr_inner_try(targets_function = targets_function, target...
    eval(parse(file = script, keep.source = TRUE), envir = envir)
    eval(parse(file = script, keep.source = TRUE), envir = envir)
    tar_target(name = df_fct, command = df %>% mutate(val_fct = factor(.data...
    tar_tidy_eval(command, envir, tidy_eval)
    rlang::quo_squash(eval(expr, envir = envir))
    is_quosure(quo)
    eval(expr, envir = envir)
    eval(expr, envir = envir)
    rlang::expr(df %>% mutate(val_fct = factor(.data[[val_field]])))
    enexpr(expr)

I recognise that the error is likely to do with tidy evaluation in some way, but I don't know how to resolve it.

0

There are 0 best solutions below