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.